r - 如何创建一个新变量并为其分配与 R 中另一个变量相对应的值?

标签 r dataframe factors

这是与我正在使用的真实数据集相对应的一些模拟数据:

模拟数据集

    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/

相关文章:

r - 选择 R 中的数字字符列

java - 求一个数的因数的方法

R:在向量列表中查找唯一向量

r - 从 R 中的时间序列数据制作 3D 表面

python - 数据作为数据帧附加在内存中

r - 如何在 R markdown HTML 中突出显示数据框中的特定单元格

r - 按降序分组条形?

reshape 数据框以将因子转换为 R 中的列

r - 在R中创建一个逻辑向量并使用哪个函数

从 .bat(批处理文件)运行 R 脚本