【问题标题】:ddply and categorization functionddply 和分类功能
【发布时间】:2012-02-04 19:37:28
【问题描述】:

我想根据后续行的比较对数据框中的列进行分类。

为:

DF <- data.frame(respondent=rep(letters[1:2], each=5), response=c(1,1,2,2,1,3,1,1,1,1))
   respondent response
1           a        1
2           a        1
3           a        2
4           a        2
5           a        1
6           b        3
7           b        1
8           b        1
9           b        1
10          b        1

我想添加一个新列(例如:检查),如果第 1 行中的响应 = 第 2 行中的响应和 0 以防它们不相同,则该列变为 1。这应该针对每个受访者单独进行。

这会给我

   respondent response check
1           a        1  1
2           a        1  0
3           a        2  1
4           a        2  0
5           a        1  
6           b        3  0
7           b        1  1
8           b        1  1
9           b        1  1
10          b        1

我想我可以用一个 foo 循环来解决这个问题,但这似乎是 ddply 的一个合适的问题......我只是不知道如何解决相邻行的比较......

【问题讨论】:

    标签: r plyr


    【解决方案1】:

    这是 plyr 的一个很好的候选,因为它拆分数据并应用函数然后返回数据。在这种情况下,您需要考虑整个response 向量和一个相似的向量移位一。

    我过去处理这个问题的方法是:

    shift.func <- function(df) {
      lag<-c(df$response[-1],0)
      df$check <- ifelse(df$response==lag,1,0)
    
      return(df)
    }
    
    ddply(DF,.(respondent),shift.func)
    

    【讨论】:

    • 这是个好主意 - 我没有看到生成移位矢量进行比较的路径 - 谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-02-09
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多