R如何隔离数据帧并执行功能



我有以下格式的数据

     Id        Duration  Name
    (Numeric)  (Factor)  (Factor)
     1          2         x
     1          3         y
     1          1         z
     2          1         x
     2          2         x

我想迭代"id"字段,对于每个唯一的id,我需要从形式为(x,y,z)的"Name"字段创建一个数组{顺序很重要}。

预期输出看起来有点像地图

     1 : (x,y,z)
     2 : (x,x)

我使用嵌套的for循环来迭代唯一(Id)的长度,但我觉得我违背了使用R.的目的

我对应用函数家族的理解有点生疏,尽管我研究了这个,特别是这个,但使用lapply的挑战也是列的数据类型的差异。

如果有人能提出一个比使用for循环更好的替代方案,请告诉我。

提前谢谢。

我建议使用data.table包:

library(data.table)
dt <- as.data.table(df)
out <- dt[, list(res = paste(Name, collapse = ',')), by = Id]

我们可以使用dplyr,因为OP的初始数据集似乎是tbl类。

library(dplyr)
df1 %>%
     group_by(Id) %>%
     summarise(val = toString(Name))
#     Id     val
#   (int)   (chr)
#1     1 x, y, z
#2     2    x, x

数据

df1 <- structure(list(Id = c(1L, 1L, 1L, 2L, 2L), Duration = 
 structure(c(2L, 
3L, 1L, 1L, 2L), .Label = c("1", "2", "3"), class = "factor"), 
    Name = structure(c(1L, 2L, 3L, 1L, 1L), .Label = c("x", "y", 
    "z"), class = "factor")), .Names = c("Id", "Duration", "Name"
), row.names = c(NA, -5L), class = c("tbl_df", "tbl", "data.frame" ))

最新更新