R 使用字符串匹配将列添加到TIBLE
我试图通过匹配不同列中的单词,将新列添加到数据框中。以mtcars为例,我想通过扫描每个行名中的字符串来创建一个列country。要查看伪代码中的前几行,请执行以下操作:R 使用字符串匹配将列添加到TIBLE,r,R,我试图通过匹配不同列中的单词,将新列添加到数据框中。以mtcars为例,我想通过扫描每个行名中的字符串来创建一个列country。要查看伪代码中的前几行,请执行以下操作: if "Mazda" in rowname then "Japan" if "Datsun" in rowname then "Japan" if "Hornet" in rowname then "USA" etc 我曾尝试将mutate与map函数结合使用,但没有效果。 任何帮助都将不胜感激。我们可以使用键/val数据集
if "Mazda" in rowname then "Japan"
if "Datsun" in rowname then "Japan"
if "Hornet" in rowname then "USA"
etc
我曾尝试将mutate与map函数结合使用,但没有效果。
任何帮助都将不胜感激。我们可以使用键/val数据集并与原始数据联接,而不是使用多个if/else或嵌套的ifelse
library(tibble)
library(dplyr
library(stringr)
keyvaldat <- tibble(make = c("Mazda", "Datsun", "Hornet"),
Country = c("Japan", "Japan", "USA"))
rownames_to_column(mtcars, "rn") %>%
mutate(make = word(rn, 1)) %>%
left_join(keyvaldat) %>%
head(4)
# rn mpg cyl disp hp drat wt qsec vs am gear carb make Country
#1 Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 Mazda Japan
#2 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 Mazda Japan
#3 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 Datsun Japan
#4 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 Hornet USA
注意:如果有100个值要更改,那么它将是100个ifelse语句。最好是在以下情况下使用case\u的联接:
在本例中使用命名向量x
library(dplyr)
x = c(Mazda = "Japan", Datsun = "Japan", Hornet = "USA")
mtcars %>%
mutate(Make = row.names(.)) %>%
select(Make) %>%
mutate(Country = x[sapply(strsplit(Make, " "), function(x) x[1])])
所有这些都非常有用。对于我正在处理的数据,使用case_when是最简单/最快的,但我可以使用这些答案中的任何一个。非常感谢所有回应的人。
library(dplyr)
x = c(Mazda = "Japan", Datsun = "Japan", Hornet = "USA")
mtcars %>%
mutate(Make = row.names(.)) %>%
select(Make) %>%
mutate(Country = x[sapply(strsplit(Make, " "), function(x) x[1])])