Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 基于名称循环数据帧_R_Loops - Fatal编程技术网

R 基于名称循环数据帧

R 基于名称循环数据帧,r,loops,R,Loops,我还有一个简单的r问题,希望有人能帮上忙。我有一系列具有重复名称结构的数据帧。我想对它们进行循环并进行一些分析。下面是我想用一些假数据做的硬编码示例: #Create some fake data n1 = c(2, 3, 5, 7) s1 = c(1, 1, 2, 0) b1 = c(6, 0, 0, 0) Tank001.df = data.frame(n1, s1, b1) n2 = c(1, 2, 4, 6) s2 = c(2, 2, 0, 0) b2 = c(8, 9, 1

我还有一个简单的r问题,希望有人能帮上忙。我有一系列具有重复名称结构的数据帧。我想对它们进行循环并进行一些分析。下面是我想用一些假数据做的硬编码示例:

#Create some fake data
n1 = c(2, 3, 5, 7) 
s1 = c(1, 1, 2, 0) 
b1 = c(6, 0, 0, 0) 
Tank001.df = data.frame(n1, s1, b1)

n2 = c(1, 2, 4, 6) 
s2 = c(2, 2, 0, 0) 
b2 = c(8, 9, 10, 0) 
Tank002.df = data.frame(n2, s2, b2)

n3 = c(7, 12, 0, 0) 
s3 = c(5, 3, 0, 0) 
b3 = c(8, 9, 10, 4) 
Tank003.df = data.frame(n3, s3, b3)
我想自动化的第一个操作是将0值转换为“NA”。这是harcoded版本,但我会根据我拥有的Tankxxx.df数据帧数量,理想情况下自动执行此操作:

#Convert zeros to NA
Tank001.df[Tank001.df==0] <- NA
Tank002.df[Tank002.df==0] <- NA
Tank003.df[Tank003.df==0] <- NA
#将零转换为NA

Tank001.df[Tank001.df==0]创建一个
数据框的
列表
,并使用
lapply
sapply
的组合,如下所示:

TankList <- list(Tank001.df, Tank002.df, Tank003.df)
lapply(TankList, function(x) {
  x[x == 0] <- NA
  sapply(x, function(y) sum(y < 5, na.rm = TRUE))
})
# [[1]]
# n1 s1 b1 
#  2  3  0 
# 
# [[2]]
# n2 s2 b2 
#  3  2  0 
# 
# [[3]]
# n3 s3 b3 
#  0  1  1 

TankList这也适用于单个
lappy
colSums

l <- list(Tank001.df, Tank002.df, Tank003.df) # create a list

lapply(l, function(x) colSums("is.na<-"(x, !x) < 5, na.rm = TRUE))

# [[1]]
# n1 s1 b1 
#  2  3  0 
# 
# [[2]]
# n2 s2 b2 
#  3  2  0 
# 
# [[3]]
# n3 s3 b3 
#  0  1  1 

l+1,获取源数据和所需输出的可复制示例。感谢您提供swift解决方案。以前没有使用过列表,对于我的简单示例,获取n1、s1和b1的平均值的语法是什么?例如,上述示例的期望结果为1.67、1.67、0。67@user1912925,对不起,我不明白你是怎么得出这些结果的。你能解释一下,我看看我能帮上什么忙吗?@AnandaMahto我想他想要所有
n*
等的平均值(但他的值不正确)或者在每个列表的第k个元素中使用
sapply
,或者将结果转换成矩阵并计算
colMeans
?+1,但肯定不是最令人难忘或常见的语法+1.我可以推荐一些像
l@agstudy这样的东西吗?好主意!
mget
函数需要一个环境参数:
mget(ls(pattern='Tank.*.df$),globalenv())
@SvenHohenstein是,但在这种情况下不需要。它与
ls
的参数(环境)相同。
l <- list(Tank001.df, Tank002.df, Tank003.df) # create a list

lapply(l, function(x) colSums("is.na<-"(x, !x) < 5, na.rm = TRUE))

# [[1]]
# n1 s1 b1 
#  2  3  0 
# 
# [[2]]
# n2 s2 b2 
#  3  2  0 
# 
# [[3]]
# n3 s3 b3 
#  0  1  1