R 将数据帧的列整齐地折叠成字符串
我有一个数据框,其中列是测试项响应(0==不正确,1==正确)。为了在其他(非R)软件中进行分析,我必须将项目响应数据转换为字符串。结果数据应如下所示:R 将数据帧的列整齐地折叠成字符串,r,dplyr,tidyverse,R,Dplyr,Tidyverse,我有一个数据框,其中列是测试项响应(0==不正确,1==正确)。为了在其他(非R)软件中进行分析,我必须将项目响应数据转换为字符串。结果数据应如下所示: for(i in 1:nrows) { text[i] <- paste(sprintf("%6d", subresp$study_id[i]), paste0(subresp[i, items], collapse='')) } > head(items) [1] "letter_sound1"
for(i in 1:nrows) {
text[i] <- paste(sprintf("%6d", subresp$study_id[i]), paste0(subresp[i, items], collapse=''))
}
> head(items)
[1] "letter_sound1" "letter_sound2" "letter_sound3" "letter_sound4"
[5] "letter_sound5" "letter_sound6"
>
24 1111111111111111111111111110111111111111111111111111111111111111111111111111
50 1111111111111111111111111101111111111110111110111111111111111111111111111111
361 1111110111111111011011111110001111001011101110111111101111111101111101111111
349 1111111111111111111111111110111111110111111101111010011111110111111111111111
我可以在循环中一次读取一行数据,如下所示:
for(i in 1:nrows) {
text[i] <- paste(sprintf("%6d", subresp$study_id[i]), paste0(subresp[i, items], collapse=''))
}
> head(items)
[1] "letter_sound1" "letter_sound2" "letter_sound3" "letter_sound4"
[5] "letter_sound5" "letter_sound6"
>
(不幸的是,列名并非都像本例中那样定期命名。)
这是可行的,但它又慢又笨拙(我必须对12个测试级别和3个表单分别进行测试),所以我想以整洁的方式进行。我尝试了以下代码:
resp.str <- subresp %>%
select(items) %>%
rowwise() %>%
mutate(resp.str=paste0(subresp[, items], collapse=""))
我尝试了quo(项目)
和!!项目
,{{{items}}
,sym(项目)
,以所有不同的组合。什么都不管用
这是非常令人沮丧的。我真的很感激任何帮助
根据要求,以下是部分数据:
structure(list(study_id = c(24, 50, 361, 349, 296), step_name = c("STEP 3",
"STEP 3", "STEP 3", "STEP 3", "STEP 3"), assessment_id = c(1888537,
2533870, 2491616, 2266251, 2315116), color = c("Purple", "Purple",
"Purple", "Purple", "Purple"), letter_sound1 = c(1, 1, 1, 1,
1), letter_sound2 = c(1, 1, 1, 1, 1), letter_sound3 = c(1, 1,
1, 1, 1), letter_sound4 = c(1, 1, 1, 1, 1), letter_sound5 = c(1,
1, 1, 1, 1), letter_sound6 = c(1, 1, 1, 1, 1), letter_sound7 = c(1,
1, 0, 1, 1), letter_sound8 = c(1, 1, 1, 1, 1), letter_sound9 = c(1,
1, 1, 1, 1), letter_sound10 = c(1, 1, 1, 1, 1)), row.names = c(NA,
-5L), class = c("tbl_df", "tbl", "data.frame"), .Names = c("study_id",
"step_name", "assessment_id", "color", "letter_sound1", "letter_sound2",
"letter_sound3", "letter_sound4", "letter_sound5", "letter_sound6",
"letter_sound7", "letter_sound8", "letter_sound9", "letter_sound10"
))
如果将数据结构读入名为
foobar
的数据框,则可以获得字符向量items
:items没有可复制的示例很难判断这是否有效,但您可以尝试以下方法:
apply(cars, 2, paste0, collapse="")
说明:
apply(object, dimension, function, args_for_function)
在“cars”的第二维度(列)上应用参数为“collapse=”“”的“paste0”,返回一个列表。使用dput()添加数据。
。这将有助于回答您的问题。请查看程序包stringr
中的stru c
函数,它是tidyverse
的一部分。实际上,您需要为我们提供一个dput
。仅从您的代码判断,您可能在pmap
,例如subresp%>%mutate(resp.str=pmap(list(subresp[,items]),paste,collapse=“”)
根据要求,我已在OP中包含部分数据。我尝试了stru c
,但将列名连接起来,而不是将列的内容与这些名称连接起来。我还尝试了pmap
和apply
,但他们给了我这个错误:error:Column
resp.str`必须是长度1(组大小),而不是76`