我有以下格式的数据
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的目的。
我对应用函数系列的理解感觉有点生疏,虽然我查看了CurInstallProgressChanged
event,特别是this,但使用lapply的挑战也是列的数据类型的差异
如果有人能提出比使用for循环更好的选择,请告诉我。
提前致谢。
答案 0 :(得分:0)
我们可以使用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" ))
答案 1 :(得分:0)
我建议使用data.table
包:
library(data.table)
dt <- as.data.table(df)
out <- dt[, list(res = paste(Name, collapse = ',')), by = Id]