【发布时间】:2018-12-01 06:57:45
【问题描述】:
我有一个数据框 df 有四列;三个整数列和一个包含列表的特殊列:
df <- data.frame(w= 1:3, x=3:5, y=6:8, z = I(list(1:2, 1:3, 1:4)))
> df
w x y z
1 1 3 6 1, 2
2 2 4 7 1, 2, 3
3 3 5 8 1, 2, 3, 4
>class(df$z)
[1] "AsIs"
我想转换 df["z"] 列的每个元素,分别将其与其他每个列的相应元素(相同的行号)相乘(df["w"], df["x" ], df["y"]) 的相同数据帧 df。
我发现了使用 Map("*", df$z, df$x) 的可能性,但它一次只能与另一列执行所需的乘法。我的数据集太大,无法让我以这么小的步数进行乘法运算。
> Map("*", df$z, df$x)
[[1]]
[1] 3 6
[[2]]
[1] 4 8 12
[[3]]
[1] 5 10 15 20
谁能提供有关如何在保留数据帧结构的同时将 df["z"] 与其他每一列相乘的提示?
我希望输出是一个数据框 df1,列名为 w,x,y。
>df1
w x y
1 2 3 6 6 12
2 4 6 4 8 12 7 14 21
3 6 9 12 5 10 15 20 8 16 24 32
谢谢。
【问题讨论】:
-
你能澄清你的预期输出吗?你希望最终的数据框是什么(对于这个例子)?
-
可能是
lapply(df[1:3], function(x) Map("*", df$z, x))帮助。但正如 DanHall 提到的,目前尚不清楚您想要的预期输出如何 -
akrun 的评论给出了你想要的输出。如果你想要它作为一个 data.frame 你可以做
as.data.frame(do.call(cbind, lapply(df[1:3], function(x) Map("*", df$z, x))))
标签: r dataframe apply multiplication