r - R:将字符串拆分为不同的变量,如果字符串包含该单词,则赋值为 1
问题描述
我需要一些帮助在 R 中设置代码来解决问题:
我想给 R 一些字符串数据作为输入,其中包含几个单词(短语、推文、任何你想要的)。字符串也可以有多个 " " 或 "," 作为分隔符。
样本输入数据
我希望 R 为所有输入字符串中的每个唯一单词设置一个变量,并在字符串包含此特定单词时设置 1(或 TRUE 或其他任何值)。
所以我想要的输出看起来像这样:
样本输出
列中的空格应包含 0,为了便于阅读,我将它们省略了。
老实说,我不是循环方面的专家,我认为使用包可能会有更简单的解决方案。感谢您的网站对此主题的任何支持,因为我有几个不同的项目,解决方案可以为我节省大量时间。
编辑:我想保留原始 ID 和字符串以供进一步处理。
解决方案
首先,对于以后的帖子,请以可复制和可复制和可粘贴的格式提供示例数据。截图不是一个好主意,因为我们不能轻易地从图像中提取数据。有关更多详细信息,请查看如何提供最小的可重现示例/尝试。
除此之外,这是一个tidyverse
解决方案
library(tidyverse)
df %>%
separate_rows(Text, sep = " ") %>%
mutate(n = 1) %>%
pivot_wider(names_from = "Text", values_from = "n", values_fill = list(n = 0))
## A tibble: 5 x 6
# ID Peanut Butter Jelly Storm Wind
# <fct> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 ID-0001 1 1 1 0 0
#2 ID-0002 1 0 0 0 0
#3 ID-0003 0 1 0 0 0
#4 ID-0004 0 0 0 1 0
#5 ID-0005 0 1 0 1 1
说明:我们使用在空白处separare_rows
拆分条目并将数据重新整形为长格式;Text
然后我们添加一个计数列;最后,我们用 将数据从长到宽重塑pivot_wider
,并用 填充缺失值0
。
或者在基础 R 中使用xtabs
df2 <- transform(df, Text = strsplit(as.character(Text), " "))
xtabs(n ~ ., data.frame(
ID = with(df2, rep(ID, vapply(Text, length, 1L))),
Text = unlist(df2$Text),
n = 1))
#ID Butter Jelly Peanut Storm Wind
# ID-0001 1 1 1 0 0
# ID-0002 0 0 1 0 0
# ID-0003 1 0 0 0 0
# ID-0004 0 0 0 1 0
# ID-0005 1 0 0 1 1
样本数据
df <- read.table(text =
"ID Text
ID-0001 'Peanut Butter Jelly'
ID-0002 Peanut
ID-0003 Butter
ID-0004 Storm
ID-0005 'Storm Wind Butter'", header = T)
推荐阅读
- reactjs - 将异步数据推送到数组反应
- python - 突出显示python中的文本和列
- c# - 为什么 net framework 4.5 azure 部署忽略应用服务连接字符串
- swift - iOS 应用程序:如何使用 kingfisher/sdwebimage 下载 aws s3 映像
- javascript - 如何动态更改 DIV html 代码中的一些数据
- scala - 为什么这个 Scala Akka 代码无法编译?
- database - vb.net OleDbDataAdapter("SELECT *") 中的问题
- javascript - Angular如何将本地图像引用到JSON对象中
- arrays - 如何从 mongo 获取嵌套数组列表?
- google-chrome-devtools - 有没有办法防止 chrome 访问 IndexedDB?