R 从不同csv生成一列的列表/向量

R 从不同csv生成一列的列表/向量,r,R,我已经加载了20个csv文件,功能如下: tbl = list.files(pattern="*.csv") for (i in 1:length(tbl)) assign(tbl[i], read.csv(tbl[i])) 看起来是这样的: > head(tbl) [1] "F1.csv" "F10_noS3.csv" "F11.csv" "F12.csv" "F12_noS7_S8.csv" [6] "F13.csv" 在所有

我已经加载了20个csv文件,功能如下:

tbl = list.files(pattern="*.csv")
for (i in 1:length(tbl)) assign(tbl[i], read.csv(tbl[i]))
看起来是这样的:

> head(tbl)
[1] "F1.csv"          "F10_noS3.csv"    "F11.csv"         "F12.csv"         "F12_noS7_S8.csv"
[6] "F13.csv"
在所有这些csv文件中都有一个名为“加入”的列。我想从每个csv文件中列出这些列中的所有“名称”。一张大单子

两个问题:

  • 有些“名字”是相同的,我不想重复它们
  • 有些“名字”几乎是一样的。区别在于有名字和后面变成点和数字
让我给你看看它的样子:

AT3G26450.1 <--
AT5G44520.2
AT4G24770.1
AT2G37220.2
AT3G02520.1
AT5G05270.1
AT1G32060.1
AT3G52380.1
AT2G43910.2
AT2G19760.1
AT3G26450.2 <--

AT3G26450.1第一个技巧:您可以使用
lappy
将所有表格读入数据帧列表。这比使用20个单独的数据帧更容易

tbl = list.files(pattern="*.csv")
list_of_data = lapply(tbl, read.csv)
第二个技巧:您可以使用
do.call
rbind
将此列表重新组合到单个数据帧中

all_data = do.call(rbind, list_of_data)
您可以使用正则表达式选择点前面的
加入
字段的内容。
stringr
包在这里很有用
^
表示字符串的开头,
[:alnum:]
表示字母或数字(字母数字字符),
+
表示一个或多个

library(stringr)
all_data$CleanedAccession = str_extract(all_data$Accession, "^[[:alnum:]]+")
最后,您可以通过对非重复的
值进行子集设置来删除重复项

all_data = subset(all_data, !duplicated(CleanedAccession))

如果您只需要名称列表,并且它们的格式与您的示例相同,则使用@Richie的all_数据:

names <- unique(substr(all_data$Accession,0,9))

命名代码看起来不错,但问题是我不能使用rbind,因为每个csv文件中的列/行数不同。有什么解决办法吗?@Rechlay:如果每个表的内容都代表同一类内容,那么您应该将它们组合起来。(您可以添加虚拟字段以使列匹配。)另一方面,如果它们表示不同的内容,则最好将它们保留为数据帧列表。您可以使用
lappy
在列表上循环并更新每个数据帧。