我有一个Pincode值的数据框(file1.csv)。
在另一组中,我有多个具有相同记录集的文件(fileset1.csv,fileset2.csv,fileset3.csv(。
我想根据file1将匹配的pincode与多个文件中的行集拉出来。
例如:
我希望所有文件的所有行的pincode和delivery%是一个单独的数据框,用file1.csv的pincode文件索引。
提前致谢。
file1.csv
Pincode Name value
110011 sia N
110012 dia S
110013 sia W
fileset1.csv
Pincode Orders Delivery Delivery%
110011 56 30 22.26
110044 80 20 35.26
110011 86 30 45.62
fileset2.csv
Pincode Orders Delivery Delivery%
110011 106 30 12.26
110044 650 220 55.26
110011 862 130 35.62
fileset3.csv
Pincode Orders Delivery Delivery%
110011 567 70 12.26
110044 801 30 25.26
110011 86 80 95.62
预期产出:
Pincode Delivery%
110011 Totalvalue of all (22.26+45.62+12.26+35.62+12.26+95.62)
答案 0 :(得分:0)
我们可以将数据框放在list
('lst')中,然后将'key'数据集('d1')中的'Pincode'列与每个data.frame
'进行比较'lst'中的Pincode'列使用%in%
,subset
来自%in%
的逻辑索引的数据集行。我们可以rbind
将list
改为data.frame
个rbindlist
。在这里,我使用了来自data.table
的{{1}}。然后,我们可以获得由'Pincode'分组的'Delivery %`列的sum
。
lst <- list(df1, df2, df3)
lst1 <- lapply(lst, function(x)
x[x$Pincode %in%d1$Pincode,c('Pincode', 'Delivery%')]))
library(data.table)
rbindlist(lst1)[,list(Delivery=sum(`Delivery%`)) , by = Pincode]
# Pincode Delivery
#1: 110011 223.64
我不确定OP是否有读取数据集。要阅读数据集,我们可以使用read.csv/read.table
中的fread
或data.table
。 ?read.csv
和其他人的帮助页面有一些示例可以指导它们是否已经完成。
d1 <- structure(list(Pincode = 110011:110013, Name = c("sia", "dia",
"sia"), value = c("N", "S", "W")), .Names = c("Pincode", "Name",
"value"), class = "data.frame", row.names = c(NA, -3L))
df1 <- read.table(text="Pincode Orders Delivery Delivery%
110011 56 30 22.26
110044 80 20 35.26
110011 86 30 45.62",
sep="", header=TRUE, check.names=FALSE)
df2 <- read.table(text="Pincode Orders Delivery Delivery%
110011 106 30 12.26
110044 650 220 55.26
110011 862 130 35.62",
sep="", header=TRUE, check.names=FALSE)
df3 <- read.table(text="Pincode Orders Delivery Delivery%
110011 567 70 12.26
110044 801 30 25.26
110011 86 80 95.62",
sep="", header=TRUE, check.names=FALSE)