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"

我有一个数据框,其中列是测试项响应(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" "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`