是缺少在这两个变量中的一个返回值R
我的数据集当然是更大的,但原理是一样的:是缺少在这两个变量中的一个返回值R
library(tidyverse)
df <- tibble(Name1 = c("Joe", "Harry", "Jane", NA, NA),
Name2 = c("Joe", "Harry", "Thomas", "Bill", "Jane"))
-
问题1:我怎样才能提取值
Name2
("Thomas"
和"Bill"
)谁在Name1
中失踪? -
问题2:我怎样才能粘贴这些值(
"Thomas"
和"Bill"
) 其中Name1
停止3210下的价值?
这是可行的一种纯粹的方式吗?
使用data.table
第一个问题:
setdiff(df$Name2, df$Name1)
为您提供了不名1出现的名字。这确实是相同的:
df$Name2[!df$Name2 %in% df$Name1]
现在,您可以只插在数据帧的缺失值(问题2):
df$Name1[is.na(df$Name1)] <- setdiff(df$Name2, df$Name1)
或者:
df$Name1[is.na(df$Name1)] <- df$Name2[!df$Name2 %in% df$Name1]
如果你想有一个tidyverse/dplyr-solution,这也是一样的:
library(tidyverse)
df %>% mutate(Name1 = ifelse(is.na(Name1), Name2[!Name2%in%Name1], Name1))
但是总的来说,我并不了解你在做什么。由于您将这些向量放在数据框中,因此两个向量的长度必须相同。此外,你显然不关心订单,你只是想要那里的名字,这意味着,给定相同的长度,相同的名字。因此,你可以用另一个覆盖另一个...
你可以在这里
library(tidyverse)
library(data.table)
df <- tibble(Name1 = c("Joe", "Harry", "Jane", NA, NA),
Name2 = c("Joe", "Harry", "Thomas", "Bill", "Jane"))
df <- data.table(df)
df[is.na(Name1), "Name1"] <- df[!Name2 %in% Name1, "Name2"]
df
Name1 Name2
1: Joe Joe
2: Harry Harry
3: Jane Thomas
4: Thomas Bill
5: Bill Jane
这个答案没有使用'data.table'包中的任何东西.... – brittenb
我能够直接使用列名 - 没有'data.table'而没有给出结果 –
@brittenb:你能帮我理解if这里有什么缺失 - 我会纠正我的错误 –
是的好我编辑我的问题 – Tdebeus
Name1中的名称是否需要匹配Name2? (Name1 = c('Joe','Harry','Thomas','Bill','Jane'),Name2 = c('Joe','Harry', '托马斯','比尔','简'))? – brittenb