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

时间:2016-01-04 12:27:48

标签: r dataframe apply

我有以下格式的数据

     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循环更好的选择,请告诉我。

提前致谢。

2 个答案:

答案 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]