我有以下格式的数据
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" ))