Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用字符串匹配将列添加到TIBLE_R - Fatal编程技术网

R 使用字符串匹配将列添加到TIBLE

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数据集

我试图通过匹配不同列中的单词,将新列添加到数据框中。以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/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])])