Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 替换data.table中的重复行_R_Data.table - Fatal编程技术网

R 替换data.table中的重复行

R 替换data.table中的重复行,r,data.table,R,Data.table,我试图替换data.table中重复行的值。假设你有 A <- c(1,2,3,4,4,6,4) B <- c("a","b","c","d","e","f","g") C <- c(10,11,23,8,8,1,3) dt <- data.table(A,B,C) 你可以 > A <- c(1,2,3,4,4,6,4) > B <- c("a","b","c","d","e","f","g") > dt <- data.table(

我试图替换data.table中重复行的值。假设你有

A <- c(1,2,3,4,4,6,4)
B <- c("a","b","c","d","e","f","g")
C <- c(10,11,23,8,8,1,3)
dt <- data.table(A,B,C)
你可以

> A <- c(1,2,3,4,4,6,4)
> B <- c("a","b","c","d","e","f","g")
> dt <- data.table(A,B,C, stringsAsFactors = FALSE)
> C <- c(10,11,23,8,8,1,3)
> dt[dt[, j = duplicated(.SD), .SDcols = c("A", "C")], B := "0"]
> dt
   A B  C
1: 1 a 10
2: 2 b 11
3: 3 c 23
4: 4 d  8
5: 4 0  8
6: 6 f  1
7: 4 g  3
>A B dt C dt[dt[,j=重复(.SD),.SDcols=C(“A”,“C”)],B:=“0”]
>dt
A、B、C
1:1A10
2:2b11
3:3C23
4:4d8
5: 4 0  8
6:6f1
7:4 g 3

。。。但是现在看到David的解决方案更简洁了…

dt[duplicated(dt,by=c(“A”,“c”)),B:=“0”]
?另外,请注意,
B
是一个字符列,因此将0指定给它没有多大意义。这只是为了给出一个可复制的示例,我正在处理真实和机密数据;)。谢谢you@DavidA我认为这应该是一个答案(要么是新的答案,要么是罗曼的答案),但这将留给你。
> A <- c(1,2,3,4,4,6,4)
> B <- c("a","b","c","d","e","f","g")
> dt <- data.table(A,B,C, stringsAsFactors = FALSE)
> C <- c(10,11,23,8,8,1,3)
> dt[dt[, j = duplicated(.SD), .SDcols = c("A", "C")], B := "0"]
> dt
   A B  C
1: 1 a 10
2: 2 b 11
3: 3 c 23
4: 4 d  8
5: 4 0  8
6: 6 f  1
7: 4 g  3