Получение искомого значения по двум столбцам в R - PullRequest
1 голос
/ 22 апреля 2020

В настоящее время я пытаюсь найти способ получить указанный c ID в качестве нового столбца.

Мой data.frame выглядит следующим образом:

V1 V2 
A B
C A
D A
A E

Что я пытаюсь получить:

V1 V2 V3 
A B B 
C A C 
D A D 
A E E 

По сути, новый столбец, который не А, но я не уверен, как это сделать.

Ответы [ 2 ]

3 голосов
/ 22 апреля 2020

Мы можем использовать ifelse

df1$V3 <- with(df1, ifelse(V1 == 'A', V2, V1))
df1
#  V1 V2 V3
#1  A  B  B
#2  C  A  C
#3  D  A  D
#4  A  E  E

Или, как упомянул @markus

with(df1, replace(V1, V1 == "A", V2[V1 == "A"]))

Или другой вариант - создать индекс строки / столбца с помощью max.col, а затем извлечь значения на основе индекса

df1[cbind(seq_len(nrow(df1)), max.col(df1 != 'A'))]
#[1] "B" "C" "D" "E"

data

df1 <- structure(list(V1 = c("A", "C", "D", "A"), V2 = c("B", "A", "A", 
"E")), class = "data.frame", row.names = c(NA, -4L))
1 голос
/ 22 апреля 2020

Другая базовая опция R (будет медленной, когда много строк)

df$V3 <- apply(df,1,setdiff,"A")

, такой что

> df
  V1 V2 V3
1  A  B  B
2  C  A  C
3  E  A  E
4  A  D  D
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...