分隔多个列并在字符串 R 的一部分之后命名列名称

问题描述 投票:0回答:1

我得到了将所有调查问题答案保存到同一单元格的数据。我试图找到一种方法将数据拆分为多个列,并使用每个字符串的一部分,直到设置分隔符作为列名称。 目前的表格是这样的

身份证 回应
1 "性别":"女","职业":"学生","左手":"左手"
2 "性别":"女","职业":"记者","递手":"右"
df <- structure(list(ID = 1:2, Response = c("gender:Female,occupation:student,handed:Left", 
"gender:Female,occupation:Reporter,handed:Right")), class = "data.frame", row.names = c(NA, 
-2L))

我希望它看起来像这样

身份证 性别 职业 双手
1 “女” “学生” “左”
2 “女” “记者” “对”

我已经成功地将问题和回答分成一栏

df<- df%>%
  mutate(NUM = row_number()) #row number is used as a key for merge

dfdelimted<- 
  str_split_fixed(df$response, ',"', 50)

dfdelimted<-data.frame(dfdelimted)
dfdelimted<- dfdelimted%>%
  mutate(NUM = row_number()) #row number is used as a key for merge

df <-  merge(df,dfdelimted, by="NUM") 

哪个输出:

身份证 v1 v2 v3
1 “性别”:“女” “职业”:“学生” “左手”:“左”
2 “性别”:“女” “职业”:“记者” “递”:“右手”

我似乎不知道如何用谷歌搜索来表达这个,所以任何帮助都会很棒!

r dataframe parsing dplyr delimiter
1个回答
0
投票

separate_longer_delim()
方法的演示。基本上我们正在做的是:

  1. 用逗号分割 Response,将每个元素变成它自己的行
  2. 将 Reponse 的每个元素拆分为名称和值
  3. 将其恢复为宽格式,其中列来自名称列,值来自值列。
library("tidyverse")

df |> 
  separate_longer_delim(Response, delim = ",") |> 
  separate_wider_delim(Response, delim = ":", names = c("name", "value")) |> 
  pivot_wider()
© www.soinside.com 2019 - 2024. All rights reserved.