在 R 中,比较数据框中 2 行的 2 个字段
In R, comparing 2 fields across 2 rows in a dataframe
我正在尝试比较 R 中数据帧上连续行的 2 个不同字段,并指出不同的字段。以下是输入数据:-
Start End
1 Atl Bos
2 Bos Har
3 Har NYC
4 Stf SFO
5 SFO Chi
我正在尝试建立一个移动链,如果终点与下一行的起点不匹配,我想指出该行。所以对于上面的内容,我会指出第 4 行如下:-
Start End Ind
1 Atl Bos Y
2 Bos Har Y
3 Har NYC Y
4 Stf SFO N
5 SFO Chi Y
我是 R 的新手,我曾尝试查找此问题,但似乎找不到解决方案。感谢任何帮助。
另一种选择是:
> Ind <- as.character(dat$Start[-1]) == as.character(dat$End [-length(dat$End)])
> dat$Ind <- c(NA, ifelse(Ind==TRUE, "Y", "N"))
> dat
Start End Ind
1 Atl Bos <NA>
2 Bos Har Y
3 Har NYC Y
4 Stf SFO N
5 SFO Chi Y
请注意,您的第一项应该是 <NA>
您可以通过 dplyr
使用 mutate
和 lead
来做到这一点。请注意,最后一项应该是 NA
,因为没有第 6 行可以与 SFO-CHI 进行比较。
library(dplyr)
df1 <- read.table(text=" Start End
Atl Bos
Bos Har
Har NYC
Stf SFO
SFO Chi", header=TRUE, stringsAsFactors=FALSE)
df1 %>%
mutate(Ind=ifelse(End==lead(Start),"Y","N"))
Start End Ind
1 Atl Bos Y
2 Bos Har Y
3 Har NYC N
4 Stf SFO Y
5 SFO Chi <NA>
我正在尝试比较 R 中数据帧上连续行的 2 个不同字段,并指出不同的字段。以下是输入数据:-
Start End
1 Atl Bos
2 Bos Har
3 Har NYC
4 Stf SFO
5 SFO Chi
我正在尝试建立一个移动链,如果终点与下一行的起点不匹配,我想指出该行。所以对于上面的内容,我会指出第 4 行如下:-
Start End Ind
1 Atl Bos Y
2 Bos Har Y
3 Har NYC Y
4 Stf SFO N
5 SFO Chi Y
我是 R 的新手,我曾尝试查找此问题,但似乎找不到解决方案。感谢任何帮助。
另一种选择是:
> Ind <- as.character(dat$Start[-1]) == as.character(dat$End [-length(dat$End)])
> dat$Ind <- c(NA, ifelse(Ind==TRUE, "Y", "N"))
> dat
Start End Ind
1 Atl Bos <NA>
2 Bos Har Y
3 Har NYC Y
4 Stf SFO N
5 SFO Chi Y
请注意,您的第一项应该是 <NA>
您可以通过 dplyr
使用 mutate
和 lead
来做到这一点。请注意,最后一项应该是 NA
,因为没有第 6 行可以与 SFO-CHI 进行比较。
library(dplyr)
df1 <- read.table(text=" Start End
Atl Bos
Bos Har
Har NYC
Stf SFO
SFO Chi", header=TRUE, stringsAsFactors=FALSE)
df1 %>%
mutate(Ind=ifelse(End==lead(Start),"Y","N"))
Start End Ind
1 Atl Bos Y
2 Bos Har Y
3 Har NYC N
4 Stf SFO Y
5 SFO Chi <NA>