我想基于变量(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())
答案 0 :(得分:7)
您可以通过在f
split()
参数中创建列表名称来自动设置列表名称。我不会添加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