如何将多列中的字符串添加到R中单列中的多行

Posted

技术标签:

【中文标题】如何将多列中的字符串添加到R中单列中的多行【英文标题】:How to add strings from multiple columns to multiple rows in a single column in R 【发布时间】:2018-03-23 04:12:28 【问题描述】:

我在 R 中有一个数据框 (超过 30 列和 5000 行),如下所示:

问 1 2 3 4 5 1 A A B C C 2 D E F 3 H I C C 4 X Y Y Y Z 5 A E F C Z

我想: 1) 删除每列中的重复项 2) 将每列中的每个字符串移动到第一列中的其他行(例如:第 6、7、8 行等) 3) 删除第一列中的重复项

我试着环顾四周,但他们通常要求将字符串添加到 1 列中并用“;”分隔或“-”,这不是我要找的..

有什么解决办法吗?我也愿意将我的 data.frame 保存到 .txt 文件中,并使用 linux/Mac Terminal 来解决问题。

非常感谢!

[更新:] 我认为应该首先减少数据,因此是第 1 步。但同意所有可以在第 3 步完成的操作。

最终的 data.frame 应该如下所示: 问 1 1个 2D 3小时 4 X 5 E 6 我 7 乙 8楼 9 C 10Z 等等……

字符串实际上是基因名称,可以在行和列中复制。由于基因名称的变化,在 Excel 中格式化它们并不理想。希望这可以解决问题。谢谢!

【问题讨论】:

你能显示你的预期输出吗?我不清楚你想得到什么。 请记住,您的列必须具有相同的长度。 同意@thelatemail;为什么要从第 1 列中删除重复项两次(一次在步骤 1 中,然后在步骤 3 中再次)。你说的删除骗子是什么意思?用其他东西替换重复的条目?删除行?删除列? @DanHall:是的,这些列都有超过 5000 行。行中缺少的字符串在 R 中列为“NA”(或者保留为空白)。 我很好地将您的表格转换为 R 对象,并将其添加到您的问题中。为什么要删除它? 【参考方案1】:
DF <- read.table(text = "Q 1 2 3 4 5
1 A A B C C
2 D E F '' ''
3 H I C C ''
4 X Y Y Y Z
5 A E F C Z", header = TRUE, stringsAsFactors = FALSE)

data.frame(x = unique(as.character(as.matrix(DF[2:length(DF)])))) 

自动分配行号。随意命名你的行。

【讨论】:

已解决!我只需将代码中的“长度”更改为“nrow”。非常感谢!【参考方案2】:

你的意思是有这样的东西吗?

final_df <- data.frame(V1 = unique(unlist(df[!is.na(df)])))

输出为:

   V1
1   A
2   D
3   H
4   X
5   E
6   I
7   Y
8   B
9   F
10  C
11  Z

样本数据:

df <- structure(list(X1 = c("A", "D", "H", "X", "A"), X2 = c("A", "E", 
"I", "Y", "E"), X3 = c("B", "F", "C", "Y", "F"), X4 = c("C", 
NA, "C", "Y", "C"), X5 = c("C", NA, NA, "Z", "Z")), .Names = c("X1", 
"X2", "X3", "X4", "X5"), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5"))

【讨论】:

有这个错误而不是..“[.data.table(test, !is.na(test)) 中的错误:i 是无效类型(矩阵)。也许将来一个 2 列矩阵可以返回一个DT 的元素列表(本着 FAQ 2.14 中 A[B] 的精神)。如果您愿意,请让 datatable-help 知道,或者将您的 cmets 添加到 FR #657。" 您应该使用dput(head(df))共享输入数据

以上是关于如何将多列中的字符串添加到R中单列中的多行的主要内容,如果未能解决你的问题,请参考以下文章

将多列合并为单列[重复]

将多列中的列表合并到熊猫中的单列

如何使用 pl/sql 中的游标将多列数据插入包含单列的表中?

使用 ibatis 将字符串列表插入到多列中的表中

从 Spark DataFrame 中的单列派生多列

DataFrame查询2 - 专用查询:索引和切片