确定数据框中特定单元格中字符串的大小:R
Determine the size of string in a particular cell in dataframe: R
在数据框中,我有一列(类型:chr),其中包含以逗号分隔的答案。我想根据字符串的大小和奖励分数创建另一列。例如,列中的一些条目是:
第 1 列
单词 1、单词 2、单词 3
单词 1、单词 2
单词 1
现在,对于第一个单元格,我希望将单元格的大小评估为 3(因为它包含三个不同的单词并且单元格值中没有重复项)。我不确定如何实现这一目标。
一个选项是将 strsplit
的列拆分为 vector
的 list
,通过遍历 list
获取 unique
元素使用 lapply
并获得 lengths
df1$Size <- lengths(lapply(strsplit(df1$Column1, ",\s*"), unique))
另一个选项是 separate_rows
来自 tidyr
library(dplyr)
library(tidyr)
df1 %>%
mutate(rn = row_number()) %>%
separate_rows(Column1) %>%
group_by(rn) %>%
summarise(Size = n_distinct(Column1), .groups = 'drop') %>%
select(Size) %>%
bind_cols(df1, .)
-输出
# Column1 Size
#1 word1,word2,word3 3
#2 word1,word2 2
#3 word1 1
数据
df1 <- data.frame(Column1 = c('word1,word2,word3', 'word1,word2', 'word1'))
原答案:
另一个选项:
library(dplyr)
library(stringr)
df %>%
mutate(Lengths = str_count(Column1, ",") + 1)
编辑:
我没有正确注意到 OP 要求(关于不重复)。正如@Onyambu 在评论中指出的那样,只有在数据中没有重复的单词 时,这个块才会起作用。
基本上就是统计字数。
在数据框中,我有一列(类型:chr),其中包含以逗号分隔的答案。我想根据字符串的大小和奖励分数创建另一列。例如,列中的一些条目是:
第 1 列
单词 1、单词 2、单词 3
单词 1、单词 2
单词 1
现在,对于第一个单元格,我希望将单元格的大小评估为 3(因为它包含三个不同的单词并且单元格值中没有重复项)。我不确定如何实现这一目标。
一个选项是将 strsplit
的列拆分为 vector
的 list
,通过遍历 list
获取 unique
元素使用 lapply
并获得 lengths
df1$Size <- lengths(lapply(strsplit(df1$Column1, ",\s*"), unique))
另一个选项是 separate_rows
来自 tidyr
library(dplyr)
library(tidyr)
df1 %>%
mutate(rn = row_number()) %>%
separate_rows(Column1) %>%
group_by(rn) %>%
summarise(Size = n_distinct(Column1), .groups = 'drop') %>%
select(Size) %>%
bind_cols(df1, .)
-输出
# Column1 Size
#1 word1,word2,word3 3
#2 word1,word2 2
#3 word1 1
数据
df1 <- data.frame(Column1 = c('word1,word2,word3', 'word1,word2', 'word1'))
原答案:
另一个选项:
library(dplyr)
library(stringr)
df %>%
mutate(Lengths = str_count(Column1, ",") + 1)
编辑:
我没有正确注意到 OP 要求(关于不重复)。正如@Onyambu 在评论中指出的那样,只有在数据中没有重复的单词 时,这个块才会起作用。
基本上就是统计字数。