Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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-测试值是否与上面单元格中的值相同_R_If Statement_Dataframe_Dplyr_Na - Fatal编程技术网

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