R-测试值是否与上面单元格中的值相同
我有以下建议:R-测试值是否与上面单元格中的值相同,r,if-statement,dataframe,dplyr,na,R,If Statement,Dataframe,Dplyr,Na,我有以下建议: name color A red B red C green D red E red F red 我想测试“color”列中的值,看看它们是否与上面行中的值相同,然后写入一个新列。。。我可以使用以下方法来执行此操作: > df$same <- ifelse(df$color == df$color[c(NA,1:(nrow(df)-1))], 1, 0) 但是有没有更干净的方法呢?我一直在使用它…您
name color
A red
B red
C green
D red
E red
F red
我想测试“color”列中的值,看看它们是否与上面行中的值相同,然后写入一个新列。。。我可以使用以下方法来执行此操作:
> df$same <- ifelse(df$color == df$color[c(NA,1:(nrow(df)-1))], 1, 0)
但是有没有更干净的方法呢?我一直在使用它…您可以尝试dplyr软件包中的滞后功能。您可以使用上面行的值创建一个新列,并在比较它们之后
> dt$color_above <- lag(dt$color, n=1)
> dt
name color color_above
1 A red <NA>
2 B red red
3 C green red
4 D red green
5 E red red
6 F red red
您可以尝试dplyr包中的lag函数。您可以使用上面行的值创建一个新列,并在比较它们之后
> dt$color_above <- lag(dt$color, n=1)
> dt
name color color_above
1 A red <NA>
2 B red red
3 C green red
4 D red green
5 E red red
6 F red red
除了Rafael的答案之外,您还可以将ifelse与dplyr::mutate一起使用:
除了Rafael的答案之外,您还可以将ifelse与dplyr::mutate一起使用:
这在标准R中如何?也许可读性更强,但不会比您的短很多:
colour <- c("red","red","green","red","red","red")
(c(NA, colour) == c(colour, NA))[1:length(colour)]
[1] NA TRUE FALSE FALSE TRUE TRUE
这在标准R中如何?也许可读性更强,但不会比您的短很多:
colour <- c("red","red","green","red","red","red")
(c(NA, colour) == c(colour, NA))[1:length(colour)]
[1] NA TRUE FALSE FALSE TRUE TRUE
可能不干净,但这里有一个替代方案:as.integercNA,diffas.integerdat$color==0。可能不干净,但这里有一个替代方案:as.integercNA,diffas.integerdat$color==0。
colour <- c("red","red","green","red","red","red")
(c(NA, colour) == c(colour, NA))[1:length(colour)]
[1] NA TRUE FALSE FALSE TRUE TRUE