r - 如何为大型数据集创建唯一向量



我试图找到跨越11,000多个观测值的单个国家的阿特金森指数度量。我有每个特定观察的十分位数度量,我可以创建一个单独的向量,例如 c(d1, d2,...d10)对于每个单一的观测值并计算阿特金森指数,但我相信有一种更快的方法可以在11,000个观测值中做到这一点。有什么可能的方法可以指示 R 在所有 11,000 个观测值中创建唯一的向量,这些观测值使用特定于每个观测值的十分位数?

我对 R 编码仍然很陌生,但我试图看看我是否可以创建某种循环来返回与每个单独观察对应的十分位数相关的向量。

id2 <- c(3.86, 5.29, 6.38, 7.32, 8.38, 9.35, 10.82, 12.47, 14.90, 21.22)
atkinson(id2, epsilon = 1)
[1] 0.1079504

这是我在键入时得到的:

dput(head(data))
structure(list(id = c(1, 2, 3, 4, 5, 6), country = c("Afghanistan", 
"Albania", "Albania", "Albania", "Albania", "Albania"), c3 = c("AFG", 
"ALB", "ALB", "ALB", "ALB", "ALB"), d1 = c(NA, 0, 3.49, 3.48,  
3.73, 3.66), d2 = c(NA, 5.29, 4.86, 4.92, 5.14, 5.19), d3 = c(NA, 
6.38, 5.84, 5.98, 6.09, 6.14), d4 = c(NA, 7.32, 6.74, 6.92, 6.98, 
7.03), d5 = c(NA, 8.38, 7.65, 7.99, 7.91, 8.08), d6 = c(NA, 9.35, 
8.84, 9.04, 8.92, 9.26), d7 = c(NA, 10.82, 10.23, 10.37, 10.3, 
10.52), d8 = c(NA, 12.47, 11.98, 12.13, 11.93, 12.29), d9 = c(NA, 
14.9, 14.93, 14.83, 14.54, 14.89), d10 = c(NA, 21.22, 25.44, 
24.34, 24.46, 22.93)), row.names = c(NA, -6L), class = c("tbl_df", 
"tbl", "data.frame"))

我可以这样做超过 11,000 次,但显然这需要一段时间,有没有办法构造 R(循环?)来为每个单独的观察做一些事情?

考虑使用apply的逐行计算,为数据框分配新列。在下面,as.vector()将所有十分位数点组合成atkinson()所需的向量。

data$atkinson_index <- apply(data[4:ncol(data)], MARGIN=1, 
function(x) atkinson(as.vector(x), epsilon = 1)
)
data

如果NA出现问题,请包装呼叫tryCatch

data$atkinson_index <- apply(data[4:ncol(data)], MARGIN=1, 
function(x) tryCatch(atkinson(as.vector(x), epsilon = 1),
error = function(e) NA)
)
data

最新更新