R 使用if语句中的条件行合并行

R 使用if语句中的条件行合并行,r,merge,conditional,rows,R,Merge,Conditional,Rows,我有一个数据框,看起来像: df <- data.frame ("ID"=c(a, b, c, c, d, e, e), "K"= c(1, 1, 1, 1, 1, 1, 1), "P"=c(1, 1, 1, 1, 2, 2, 1), "C"=c(1, 2, 1, 2, 1, 2, 1)) ID K P C a 1 1 1 b 1 1 2 c 1 1 1 c 1 1 2 d 1 2 1 e 1 2 2

我有一个数据框,看起来像:

df <- data.frame ("ID"=c(a, b, c, c, d, e, e), "K"= c(1, 1, 1, 1, 1, 1, 1), 
                       "P"=c(1, 1, 1, 1, 2, 2, 1), "C"=c(1, 2, 1, 2, 1, 2, 1))
  ID K P C
   a 1 1 1
   b 1 1 2
   c 1 1 1
   c 1 1 2
   d 1 2 1
   e 1 2 2
   e 1 1 1
到目前为止,我只能做到:

for (row in 1:nrow(df) ) {
  if length(df$ID) >=2



 }
但我很困惑,因为我甚至不知道这是否是正确的开始方式


谢谢

plyr的
包在这里很有用

原版
df下面是一种使用baseR的不同方法:

df <- data.frame ("ID"=c(1, 2, 3, 3, 4, 5, 5), "K"= c(1, 1, 1, 1, 1, 1, 1), 
                  "P"=c(1, 1, 1, 1, 2, 2, 1), "C"=c(1, 2, 1, 2, 1, 2, 1))

dupl = with(df, duplicated(ID, K, P))
df$c = with(df, ifelse(dupl == TRUE & K == 1, -99, C)

df标准也不是很清楚(至少对我来说),你能详细解释一下吗?这很有效!非常感谢!只是一个简单的问题。有没有学习plyr软件包的好工具?实际上,另一个问题是,当我在数据中运行它时,它似乎不会保留其他未触及的列。在我的数据中,我像其他6列一样,每行都有附加信息,但我不知道如何保留这些列?不知道任何plyr材料,抱歉!不过谷歌上有很多,例如。
df <- data.frame ("ID"=c(1, 2, 3, 3, 4, 5, 5), "K"= c(1, 1, 1, 1, 1, 1, 1), 
                  "P"=c(1, 1, 1, 1, 2, 2, 1), "C"=c(1, 2, 1, 2, 1, 2, 1))
library(plyr)
ddply(df, .variables = .(ID),
      summarize,
      K = if (length(K) == 1) K else if (all(K == 1)) 1 else -99,
      P = if (length(P) == 1) P else if (all(P == 1)) 1 else -99,
      C = if (length(C) == 1) C else if (all(C == 1)) 1 else -99)
df <- data.frame ("ID"=c(1, 2, 3, 3, 4, 5, 5), "K"= c(1, 1, 1, 1, 1, 1, 1), 
                  "P"=c(1, 1, 1, 1, 2, 2, 1), "C"=c(1, 2, 1, 2, 1, 2, 1),
                  "extra1" = c("a", "b", "c", "c", "d", "e", "e"),
                  "extra2" = c("A", "B", "C", "C", "D", "E", "E"))
library(plyr)
df1 <- ddply(df, .variables = .(ID),
             summarize,
             K = if (length(K) == 1) K else if (all(K == 1)) 1 else -99,
             P = if (length(P) == 1) P else if (all(P == 1)) 1 else -99,
             C = if (length(C) == 1) C else if (all(C == 1)) 1 else -99)
df2 <- merge(df1, unique(df[, setdiff(names(df), c("K", "P", "C"))]),
             by = "ID")
df <- data.frame ("ID"=c(1, 2, 3, 3, 4, 5, 5), "K"= c(1, 1, 1, 1, 1, 1, 1), 
                  "P"=c(1, 1, 1, 1, 2, 2, 1), "C"=c(1, 2, 1, 2, 1, 2, 1))

dupl = with(df, duplicated(ID, K, P))
df$c = with(df, ifelse(dupl == TRUE & K == 1, -99, C)