我想基于变量(df$pet)的值创建三个新的数据帧,以便最终得到dfdogCorrect,dfcatCorrect和dfratCorrect。

我当前代码的问题是我无法使新数据帧的名称正常工作。我使用的是unique(df$pet),它接受pet中的第一个唯一元素并将其分配给第一个新数据帧,而不管新数据帧的内容如何。

任何帮助您将不胜感激。

初始点:

df <- data.frame(pet=c("dog","dog","dog","cat","cat","rat","rat","rat","rat"),relstatus=c(1,2,1,2,2,2,2,1,2),age=c(34,54,56,32,45,64,65,32,45), stringsAsFactors = FALSE)


期望的结果:

dfdogCorrect <- data.frame(pet=c("dog","dog","dog"),relstatus=c(1,2,1),age=c(34,54,56), stringsAsFactors = FALSE)
dfcatCorrect <- data.frame(pet=c("cat","cat"),relstatus=c(2,2),age=c(32,45), stringsAsFactors = FALSE)
dfratCorrect <- data.frame(pet=c("rat","rat","rat","rat"),relstatus=c(2,2,1,2),age=c(64,65,32,45), stringsAsFactors = FALSE)


当前代码:

s <- setNames(split(df, df$pet), paste0("df", unique(df$pet)))
list2env(s, globalenv())

最佳答案

您可以通过在fsplit()参数中创建列表名称来自动设置列表名称。我不会添加list2env()行,因为我认为最好将类似的数据保留在列表中,而不是将它们分散到全局环境中。

split(df, paste0("df", df$pet, "Correct"))
# $dfcatCorrect
#   pet relstatus age
# 4 cat         2  32
# 5 cat         2  45
#
# $dfdogCorrect
#   pet relstatus age
# 1 dog         1  34
# 2 dog         2  54
# 3 dog         1  56
#
# $dfratCorrect
#   pet relstatus age
# 6 rat         2  64
# 7 rat         2  65
# 8 rat         1  32
# 9 rat         2  45

10-06 05:06
查看更多