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

时间:2019-07-16 16:33:41

标签: r loops matrix vector

我正在尝试找到涵盖11,000多个观测值的各个国家的阿特金森指数测度。对于每个特定的观测值,我都有十分位数的度量,可以创建一个单独的矢量ex。每个观测值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(一个循环?)来针对每个观察结果沿着这条线做一些事情?

1 个答案:

答案 0 :(得分:0)

请考虑使用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