r - 基于子集比较两个字符

标签 r plyr

我有一个包含两列的简单数据框:

df <- data.frame(x = c(1,1,2,2,3), 
                 y = c(rep(1:2,2),1), 
                 target = c('a','a','a','b','a'))

我想在 x 的每个级别(x 的相同数字)内比较目标列中的字符串(找出它们是否相等,即 TRUE 或 FALSE)。
首先,我想比较第 1 行和第 2 行,然后比较第 3 行和第 4 行...
我的问题是我遗漏了一些比较,例如,第 5 行只有一种情况而不是两种情况——所以结果应该是 FALSE。
变量 y 表示 x 中的第一种和第二种情况。

我玩过 ddply 做类似的事情:
ddply(df, .(x), summarise,
        ifelse(as.character(df[df$y == '1',]$target), 
               as.character(df[df$y == '2',]$target),0,1))

这是丑陋的......
并且不起作用...

任何见解如何实现这种比较?

谢谢

最佳答案

ddply(df, .(x), function(d) NROW(d) == 2 & d$target[1] == d$target[2])

这假设您希望该值仅在恰好有 2 行具有该“x”值时才为 TRUE。如果可能有 3 个或更多,并且您希望它为 TRUE,如果所有 target值相同,您可以执行以下操作:
ddply(df, .(x), function(d) NROW(d) > 1 & length(unique(d$target)) == 1)

关于r - 基于子集比较两个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12271536/

相关文章:

debugging - 调试 R 代码时如何跳过循环

r - 更改已采用 SpatialPointsDataFrame 格式的对象的坐标值

r - 使用 dplyr 在数据操作中使用 revalue

r - 基于阈值的汇总表

r - 将新列添加到数据框列表,然后添加名称完整的 'unlist'?

r - 如何更改 ggplot2 条形图中的堆叠顺序?

在函数中重置par()

r - 不使用ddply和merge计算 "group characteristics"

r - 如何通过公共(public) ID 从大型数据集中提取行并利用这些行的方法制作具有这些 ID 的列

r - 在 R : Error in do. ply(i) 中使用并行 plyr 和 data.table 时出错:任务 1 失败 - "invalid subscript type ' 列表'"