使用R在循环中绑定向量

时间:2016-10-28 23:50:57

标签: r dataframe data-science cbind

我需要在数据框中添加$obj = [PSCustomObject]@{"Haystack1" = "test"; "Haystack2" = "needle"} $obj.PSObject.Properties | ? { $_.Value -eq "needle" } 函数返回的向量[attributes]。现在,我得到一个大矩阵。我试过追加方法(如下)

remove_outliers

导致大矩阵

这是输入数据帧: enter image description here

当前输出为:(循环中带有cbind) enter image description here

并且期望的结果应该是具有相同行数和列数的数据帧。

非常感谢任何帮助。 PS:我是R和数据科学的新手。

1 个答案:

答案 0 :(得分:1)

只需将lapply与您的用户定义函数一起使用,即可避免使用cbinding或append。在数据框上使用lapply()时,您会对每列执行操作:

cleaned_data <- data.frame(lapply(data_rm_val, remove_outliers))

现在上面假定您定义的函数, remove_outliers 返回一个矢量类型。要确保向量始终输出,请考虑vapply()定义长度等于输入或nrow(data_rm_val)

cleaned_data <- data.frame(vapply(data_rm_val, remove_outliers, numeric(nrow(data_rm_val))))

以上两个选项适用于随机数的数据集(因为OP不提供示例数据):

data_rm_val <- data.frame(matrix(rnorm(25),5))

#           X1         X2         X3         X4          X5
# 1  0.4303766  1.8152041  0.3355174 -0.4880282 -0.63612820
# 2  0.2876950 -0.7613642 -1.5046115  0.1821653  0.09397964
# 3 -2.3402548 -0.6771749 -2.0122667 -0.9442210 -1.30994853
# 4  1.4224979 -1.7940421 -0.5110736 -0.2837820 -0.24240172
# 5 -0.7484131 -0.8159326 -1.2690513 -1.0422656  1.23811458

cleaned_data <- data.frame(lapply(data_rm_val, remove_outliers))

#           X1         X2         X3         X4          X5
# 1  0.4303766         NA  0.3355174 -0.4880282 -0.63612820
# 2  0.2876950 -0.7613642 -1.5046115  0.1821653  0.09397964
# 3 -2.3402548 -0.6771749 -2.0122667 -0.9442210 -1.30994853
# 4  1.4224979         NA -0.5110736 -0.2837820 -0.24240172
# 5 -0.7484131 -0.8159326 -1.2690513 -1.0422656          NA

cleaned_data2 <- data.frame(vapply(data_rm_val, 
                                   remove_outliers, numeric(nrow(data_rm_val))))

#           X1         X2         X3         X4          X5
# 1  0.4303766         NA  0.3355174 -0.4880282 -0.63612820
# 2  0.2876950 -0.7613642 -1.5046115  0.1821653  0.09397964
# 3 -2.3402548 -0.6771749 -2.0122667 -0.9442210 -1.30994853
# 4  1.4224979         NA -0.5110736 -0.2837820 -0.24240172
# 5 -0.7484131 -0.8159326 -1.2690513 -1.0422656          NA