为什么我不能只提取带有循环 for in r 的列字段的第一个单词?

Why can't I extract only the first word of the fields of a column with loop for in r?


谁能帮我完成这个简单的任务。
我刚开始使用 r,我不明白为什么这部分代码不在 运行 循环中。
我尝试在循环外使用函数 strsplit() 并且效果很好,但我没有按照我想要的方式在 运行 代码中成功,在 for 循环中,在数据框。

代码如下:

mpg <- ggplot2::mpg
df_sort <- data.frame(uni_model = sort(unique(mpg$model)))
df_sort$model1 <- ''
for (x in seq_along(df_sort$model)){
    df_sort[x, 'model1'] <- strsplit(df_sort[x, 'model'], ' ')    
}

我建议学习更多关于 tidyverse 的知识,因为它提供了一个很好的框架来学习和应用 R 工具,而不必处理基础 R 的特性。以下代码使用 dplyrstringr 用于字符串操作:

library(dplyr)
library(stringr)

mutate(df_sort, model1 = word(uni_model, 1))

                uni_model      model1
1             4runner 4wd     4runner
2                      a4          a4
3              a4 quattro          a4
4              a6 quattro          a6
5                  altima      altima

etc...

请注意,您不需要使用 for 循环,因为 R 默认情况下会进行矢量化。也就是说,您应用于向量的任何函数将默认应用于该向量的每个元素。

使用基础 R,借鉴 :

df_sort$model1 <- sapply(strsplit(df_sort$uni_model, "\s"), `[`, 1)