首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将每一行的所有列作为字符串进行连接,并将其写入R中的另一个数据帧

将每一行的所有列作为字符串进行连接,并将其写入R中的另一个数据帧
EN

Stack Overflow用户
提问于 2021-01-18 16:27:21
回答 1查看 492关注 0票数 1

我试图更改数据框架的多个元素,将每一行的所有列连接起来,并将它们写入R中的一个新数据框架中,以便使用字典更改多个元素,我在here中遵循了Ramnath的解决方案。

下面可以看到我的示例代码:

代码语言:javascript
复制
arr <- c(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 1073741824)

dict = list('1' = 'germline', '2' = 'somatic', '4' = 'inherited', '8' = 'paternal',
            '16' = 'maternal', '32' = 'de-novo', '64' = 'biparental', '128' = 'uniparental',
            '256' = 'not-tested', '512' = 'tested-inconclusive', '1024' = 'not-reported',
            '1073741824' = 'other')

a <- data.frame(t(combn(arr, 3)), stringsAsFactors = FALSE)
nr = nrow(a)
b <- as.data.frame(matrix(nrow = nr, ncol = 1))
row.names(b) <- rowSums(a)
a[] <- lapply(a, as.character)

for (j in 1:length(dict)) {
  a <- replace(a, a == names(dict[j]), dict[j])
}
for (i in 1:nr) {
  b[i, 1] <- paste(as.character(as.vector(a[i,])), collapse = ", ")
}

我的预期输出是(示例):

代码语言:javascript
复制
> b[1,1]
[1] germline, somatic, inherited

然而,我明白这一点:

代码语言:javascript
复制
> b[1,1]
[1] "list(\"germline\"), list(\"somatic\"), list(\"inherited\")"

我不知道是什么问题,如果你能帮我解决问题,我会很高兴的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-18 16:45:00

请注意,a[i,]是一个data.frame,例如,可以从

代码语言:javascript
复制
> str(a[1,])
'data.frame':   1 obs. of  3 variables:
 $ X1:List of 1
  ..$ : chr "germline"
 $ X2:List of 1
  ..$ : chr "somatic"
 $ X3:List of 1
  ..$ : chr "inherited"

一个解决办法是使用unlist(a[i,])

代码语言:javascript
复制
for (i in 1:nr) {
  b[i, 1] <- paste(unlist(a[i, ]), collapse = ", ")
}

这样的话

代码语言:javascript
复制
> head(b)
                                V1
7     germline, somatic, inherited
11     germline, somatic, paternal
19     germline, somatic, maternal
35      germline, somatic, de-novo
67   germline, somatic, biparental
131 germline, somatic, uniparental

一个更简单的选择是使用do.call + paste

代码语言:javascript
复制
b[, 1] <- do.call(paste, c(a, sep = ", "))

这给

代码语言:javascript
复制
> head(b)
                                V1
7     germline, somatic, inherited
11     germline, somatic, paternal
19     germline, somatic, maternal
35      germline, somatic, de-novo
67   germline, somatic, biparental
131 germline, somatic, uniparental
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65778402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档