如何将多列中的字符串添加到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中单列中的多行的主要内容,如果未能解决你的问题,请参考以下文章