【问题标题】:Subsetting a data frame for all the unique values of a row为一行的所有唯一值设置一个数据框
【发布时间】:2015-06-19 14:17:43
【问题描述】:

假设我有一个数据框:

id   value
1    "hi"
1    "hi"
1    "hi again"
1    "hi again"
2    "hello"
2    "hi"

现在我想为 id 列中的每个不同值获取一个单独的数据框。

df1
    id    value
    1     "hi"
    1     "hi"
    1     "hi again"
    1     "hi again"
and df2 
    id    value
    2     "hello"
    2     "hi"

如何在 R 中有效地实现这一点?

我试着做for循环

 df <- data.frame(id=c('1','1','1','1','2','2'),value=c('hi','hi','hi again','hi again','hello','hi'))
 for (i in 1:length(unique(df$id)))  {
         df1 <- df[unique(df$id)[i],]
         print(df1)
     }

但结果是

id value
1  1    hi
  id value
2  1    hi

我了解 apply 系列对数据框中的每一行都执行相同的操作,但在这种情况下我无法使用它们。可能是我遗漏了一些明显的东西吗?

【问题讨论】:

  • 试试split(df, df$id)
  • 这就像一个魅力。感谢您的快速回复。
  • @JayBlack 拆分但不将单独的数据框保存在单独的对象中。看起来发布的代码是为了达到这个目的。
  • @SabDeM 最好将所有数据框放在一个列表中,而不是在全局环境中使用单独的对象。对于单独的对象,只需在命名列表元素后用 list2env 包装
  • 我并不是说什么更好或不好。我只是在暗示我认为 Shiva 的意图。

标签: r frame subset data-manipulation


【解决方案1】:

根据上面的cmets,单独添加了分配数据帧的命令。

df_list <- split(df, df$id)
names(df_list) <- c("df1", "df2")
list2env(df_list, envir = .GlobalEnv)

【讨论】:

    猜你喜欢
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 2017-07-21
    相关资源
    最近更新 更多