gpt4 book ai didi

r - 根据名称循环数据框

转载 作者:行者123 更新时间:2023-12-04 23:55:19 24 4
gpt4 key购买 nike

我还有另一个简单的 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”。这是硬编码版本,但我理想情况下会根据我拥有的 Tankxxx.df 数据帧的数量自动执行此操作:
#Convert zeros to NA
Tank001.df[Tank001.df==0] <- NA
Tank002.df[Tank002.df==0] <- NA
Tank003.df[Tank003.df==0] <- NA

最后我想完成对数据的一系列查询,一个简单的例子可能是每个数据帧中小于 5 的值的数量:
#Return the number of values smaller than 5
Tank001.less.than.5 <- numeric(length(Tank001.df))
for (i in 1:(length(Tank001.df))) {Tank001.less.than.5[i] <- sum(Tank001.df[[i]] < 5,na.rm=TRUE)}
Tank002.less.than.5 <- numeric(length(Tank002.df))
for (i in 1:(length(Tank002.df))) {Tank002.less.than.5[i] <- sum(Tank002.df[[i]] < 5,na.rm=TRUE)}
Tank003.less.than.5 <- numeric(length(Tank003.df))
for (i in 1:(length(Tank003.df))) {Tank003.less.than.5[i] <- sum(Tank003.df[[i]] < 5,na.rm=TRUE)}

理想情况下,我还想知道如何将这种简单计算的结果写入新的数据帧。在这种情况下,例如 Less.than.5$TankXXX 等。

任何帮助将不胜感激。

最佳答案

创建一个 list您的 data.frame s 和使用 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

关于r - 根据名称循环数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17441404/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com