这是与我正在使用的真实数据集相对应的一些模拟数据:
模拟数据集
a <- c("a","b","c","d","e","f","g","h","i","j")
b <- 1:10
names <-c("Alex","Ale","Alexandra","Alexander","Ali","Amanda","Alix","Ajax","Aley","Ajay")
data <- data.frame(a,b,names)
创建新变量性别
data <- data %>%
mutate(gender = NA)
我想为数据集中的 names
变量分配一个“性别”值。我不想手动执行此操作,因为我正在处理数千个观察结果。不过,我确实有这些变量,其中包含与正确性别相对应的“名称”值:
male <- c("Alex", "Ale", "Alexander")
female <- c("Alexandra", "Ali", "Amanda")
noanswer <- c("Alix", "Ajax", "Aley", "Ajay")
但是我不知道如何使用它们来分配“性别”值以与数据集中的特定“名称”相对应。
这是我尝试过的:
data$gender[data$names== male] <- "Male"
还有:
data$gender[data$names== c("Alex", "Ale", "Alexander")] <- "Male"
此代码不会将“Male”分配给所有值。我收到一条警告消息:
"Warning message:
In data$names == c("Alex", "Ale", "Alexander") :
longer object length is not a multiple of shorter object length"
有谁知道如何为与 names
变量相对应的 gender
变量赋值?
最佳答案
我们可以创建一个命名的列表
,然后将其堆叠
到一个两列数据集,我们在联接中使用该数据集
new <- stack(list(male = male, female = female, noanswer = noanswer))
names(new) <- c("names", "gender")
data <- data %>%
left_join(new, by = "names")
-输出
data
a b names gender
1 a 1 Alex male
2 b 2 Ale male
3 c 3 Alexandra female
4 d 4 Alexander male
5 e 5 Ali female
6 f 6 Amanda female
7 g 7 Alix noanswer
8 h 8 Ajax noanswer
9 i 9 Aley noanswer
10 j 10 Ajay noanswer
关于OP的警告
,只是==
是元素比较,并且主要适用于长度
为1的情况datasets 要么是 1(被回收),要么与另一个长度相同。这里,长度
是不同的。因此,它会被回收,并且由于它不是其他向量长度的倍数,因此会出现警告。但是,有时我们没有收到警告,但它仍然是不正确的,因为它的作用与下面的类似。如果第二个向量的长度为 3,第一个向量的长度为 5
v1[1] == v2[1]
v1[2] == v2[2]
v1[3] == v2[3]
v1[4] == v2[1]
...
相反,我们可以使用%in%
data$gender[data$names %in% male] <- "Male"
data$gender[data$names %in% female] <- "Female"
data$gender[data$names %in% noanswer] <- "noanswer"
数据
data <- structure(list(a = c("a", "b", "c", "d", "e", "f", "g", "h",
"i", "j"), b = 1:10, names = c("Alex", "Ale", "Alexandra", "Alexander",
"Ali", "Amanda", "Alix", "Ajax", "Aley", "Ajay")),
class = "data.frame", row.names = c(NA,
-10L))
关于r - 如何创建一个新变量并为其分配与 R 中另一个变量相对应的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67842458/