按R中的字符串指定的选定列对行求和
我拥有的:一个包含1451行和4663列的大文件,值为0、1和NAs。行名称表示场地,列名称表示调查日期。我希望使用特定的日期间隔对行进行求和,也就是对引用列名称(表示日期)的特定列进行求和。在本例中,我有666个不同的日期间隔来求和行。特定间隔在对象类型字符中 一个简短的可复制示例是:按R中的字符串指定的选定列对行求和,r,data-management,rowsum,R,Data Management,Rowsum,我拥有的:一个包含1451行和4663列的大文件,值为0、1和NAs。行名称表示场地,列名称表示调查日期。我希望使用特定的日期间隔对行进行求和,也就是对引用列名称(表示日期)的特定列进行求和。在本例中,我有666个不同的日期间隔来求和行。特定间隔在对象类型字符中 一个简短的可复制示例是: df <- read.table(text =" 2005-09-23 2005-09-24 2005-09-25 2005-09-26 2005-09-27 2005-09
df <- read.table(text =" 2005-09-23 2005-09-24 2005-09-25 2005-09-26 2005-09-27 2005-09-28 2005-09-29 2005-09-30 2005-10-07 2005-10-08
1 0 0 1 NA 1 0 1 NA 1 0
2 1 1 1 1 1 1 1 1 1 1
3 NA NA NA NA NA NA NA NA NA NA", header = TRUE)
df我们将“df”的列名转换为Date
类,然后将\uu
处的“interval”向量拆分为一个向量列表
,使用“v1”的比较运算符创建一个逻辑向量,在此基础上对“df”的列进行子集划分,最后得到行和
,cbind
列出元素
v1 <- as.Date(names(df), "X%Y.%m.%d")
out <- do.call(cbind.data.frame, lapply(strsplit(intervals, "_"), function(x){
tmp <- df[v1 >= x[1] & v1 <= x[2]]
NA^(!rowSums(!is.na(tmp)))* rowSums(tmp, na.rm = TRUE)
}))
colnames(out) <- intervals
out
# 2005-09-23_2005-09-26 2005-09-27_2005-10-30 2005-10-07_2005-10-08
#1 1 3 1
#2 4 6 2
#3 NA NA NA
v1对于第二列,我得到3,6,NA作为输出。你能检查一下你的“结果”中是否有拼写错误吗。我的结果的第二栏没有任何打字错误。其余的列都很好,我不知道为什么第二列不匹配。需要注意的是:第二列的日期周期总和并不代表该时间段内的所有连续天数(即时间段为9月27日至10月30日,但该时间段内只有3天的数据)。这可能是此时间段总和的错误结果的问题吗?
result <- read.table(text =" 2005-09-23_2005-09-26 2005-09-27_2005-10-30 2005-10-07_2005-10-08
1 1 2 1
2 4 4 2
3 NA NA NA", header = TRUE)
v1 <- as.Date(names(df), "X%Y.%m.%d")
out <- do.call(cbind.data.frame, lapply(strsplit(intervals, "_"), function(x){
tmp <- df[v1 >= x[1] & v1 <= x[2]]
NA^(!rowSums(!is.na(tmp)))* rowSums(tmp, na.rm = TRUE)
}))
colnames(out) <- intervals
out
# 2005-09-23_2005-09-26 2005-09-27_2005-10-30 2005-10-07_2005-10-08
#1 1 3 1
#2 4 6 2
#3 NA NA NA