如何在过滤函数中使用 apply
How to use apply in a filter function
听起来好像已经被问过很多次了,但我无法使以前的任何解决方案起作用。我有以下问题:
我有一个包含骨骼测量和其他信息的大数据框。一列 (HREPP) 包含骨骼所在区域的名称。现在我想为每个区域创建一个新的数据框,以计算这个较小 table 内的均值、偏差等。 (我知道也可以从完整的 table 中计算出来,但这需要更多的编程技巧。)
我使用
为区域创建了一个唯一值的排序列表
unique_hrepp <- unique(ni[3])
因为该区域的列 "HREPP" 是 df "ni" 的第三列。然后我使用以下方式订购它:
unique_hrepp <- unique_hrepp[order(unique_hrepp$HREPP, decreasing = FALSE), ]
所有这些都运行良好,现在我想过滤大 table。最简单的事情是这样做:
hrepp_1 <- filter(fulltable, HREPP == unique_hrepp[1])
hrepp_2 <- filter(fulltable, HREPP == unique_hrepp[2])
hrepp_3 <- filter(fulltable, HREPP == unique_hrepp[3])
但我有大约 50 个区域,不想一遍又一遍地重复这个。另外我想知道它是如何正确完成的。
我来了
lapply(unique_hrepp, function(x) filter(fulltable, HREPP == "unique_hrepp"))
这几乎是正确的,但所有信息似乎都消失了,因为单元格中没有内容,而且我无法将数据帧作为输出。
正如索托斯所建议的那样:
您可以先使用 R 中的 split
函数拆分 data.frame
列表中的大 data.frame
。只需确保 HREPP 列为 class factor
。您不必订购它。
ldf = split(x = df, f = df$HREPP)
ldf
是 data.frames 的列表,其中每个 data.frame 将包含对 HREPP
.
列中区域的唯一值的观察
现在您可以使用 lapply
分别计算列表中每个 data.frames 中每个区域的平均值:
ldf = lapply(x= ldf,FUN= function(t){t$mean_density = mean(t$density,na.rm=TRUE);t})
ldf = lapply(x= ldf,FUN= function(t){t$mean_weight = mean(t$weight,na.rm=TRUE);t})
然后您可以使用 data.table
包中的 rbindlist
将列表组合回 data.frame :
df = rbindlist(l = ldf,use.names=TRUE)
df = as.data.frame(df)
听起来好像已经被问过很多次了,但我无法使以前的任何解决方案起作用。我有以下问题:
我有一个包含骨骼测量和其他信息的大数据框。一列 (HREPP) 包含骨骼所在区域的名称。现在我想为每个区域创建一个新的数据框,以计算这个较小 table 内的均值、偏差等。 (我知道也可以从完整的 table 中计算出来,但这需要更多的编程技巧。)
我使用
为区域创建了一个唯一值的排序列表unique_hrepp <- unique(ni[3])
因为该区域的列 "HREPP" 是 df "ni" 的第三列。然后我使用以下方式订购它:
unique_hrepp <- unique_hrepp[order(unique_hrepp$HREPP, decreasing = FALSE), ]
所有这些都运行良好,现在我想过滤大 table。最简单的事情是这样做:
hrepp_1 <- filter(fulltable, HREPP == unique_hrepp[1])
hrepp_2 <- filter(fulltable, HREPP == unique_hrepp[2])
hrepp_3 <- filter(fulltable, HREPP == unique_hrepp[3])
但我有大约 50 个区域,不想一遍又一遍地重复这个。另外我想知道它是如何正确完成的。
我来了
lapply(unique_hrepp, function(x) filter(fulltable, HREPP == "unique_hrepp"))
这几乎是正确的,但所有信息似乎都消失了,因为单元格中没有内容,而且我无法将数据帧作为输出。
正如索托斯所建议的那样:
您可以先使用 R 中的 split
函数拆分 data.frame
列表中的大 data.frame
。只需确保 HREPP 列为 class factor
。您不必订购它。
ldf = split(x = df, f = df$HREPP)
ldf
是 data.frames 的列表,其中每个 data.frame 将包含对 HREPP
.
现在您可以使用 lapply
分别计算列表中每个 data.frames 中每个区域的平均值:
ldf = lapply(x= ldf,FUN= function(t){t$mean_density = mean(t$density,na.rm=TRUE);t})
ldf = lapply(x= ldf,FUN= function(t){t$mean_weight = mean(t$weight,na.rm=TRUE);t})
然后您可以使用 data.table
包中的 rbindlist
将列表组合回 data.frame :
df = rbindlist(l = ldf,use.names=TRUE)
df = as.data.frame(df)