浏览了有关该主题的几篇文章,但找不到解决方案。
我有以下使用data <- structure(list(Person = 1:3, Statute = c("21 O.S. 1", "21 O.S. 14",
"22 O.S. 3"), Statute2 = c("22 O.S. 3", NA, NA)), .Names = c("Person",
"Statute", "Statute2"), class = "data.frame", row.names = c(NA,
-3L))
遍历整个数据帧的代码。
apply()
但是我想基于列的值而不是整个数据集来遍历子集。
例如,我有一个变量pclm <- data.frame(apply(B01001_AGE[6:23], 1, function(x){
pclm <- pclm(x=seq(0,85,by=5), y=c(x), nlast=26, control = list(lambda = NA, deg = 3, kr = 1)) #nlast=26, assuming the oldest people alive are 110 years of age, 85+26=111.
round(fitted(pclm))
}))
,我想在sumlev
时将我的代码用于子集。
不生成数据集的子集怎么办?谢谢。
答案 0 :(得分:1)
我怀疑您在问如何将功能应用于子集而不会撕裂数据框。正确吗?
在这种情况下,答案很简单:将函数应用于子集,然后将返回值重新分配给数据框的子集。例如,考虑一下:
原文:
mtcars[5:10, 2:3]
cyl disp
Hornet Sportabout 8 360.0
Valiant 6 225.0
Duster 360 8 360.0
Merc 240D 4 146.7
Merc 230 4 140.8
Merc 280 6 167.6
将函数应用于子集:
mtcars[5:10, 2:3] = t(apply(mtcars[5:10, 2:3], 1, function(x) x*x ))
让我们看一下子集:
mtcars[5:10, 2:3]
cyl disp
Hornet Sportabout 64 129600.00
Valiant 36 50625.00
Duster 360 64 129600.00
Merc 240D 16 21520.89
Merc 230 16 19824.64
Merc 280 36 28089.76
如果您正在寻找根据条件选择行的简单方法,请考虑以下问题:
mask <- mtcars["carb"]>3
head(mtcars[mask,])
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160.00 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160.00 110 3.90 2.875 17.02 0 1 4 4
Duster 360 14.3 64 129600.00 245 3.21 3.570 15.84 0 0 3 4
Merc 280 19.2 36 28089.76 123 3.92 3.440 18.30 1 0 4 4
Merc 280C 17.8 6 167.60 123 3.92 3.440 18.90 1 0 4 4