【问题标题】:R Data.Table Transform ColumnsR Data.Table 转换列
【发布时间】:2020-03-19 22:11:15
【问题描述】:
data1=data.frame("StudentID"=c(1,2,3,4,5),
"Group"=c(A,A,B,B,B),
"cat"=c(2,4,1,3,2),
"fox"=c(3,1,5,1,5),
"score"=c(2,2,2,2,3))




data2=data.frame("StudentID"=c(1,2,3,4,5),
"Group"=c(A,A,B,B,B),
"cat"=c(0.693147181,1.386294361,0,1.098612289,0.693147181),
"fox"=c(1.098612289,0,1.609437912,0,1.609437912),
"score"=c(0.693147181,0.693147181,0.693147181,0.693147181,1.098612289))

我有 data1,但希望实现 data2,其中来自 data1 的 'cat' 和 'fox' 和 'score' 被对数转换以获取 data2。我想知道是否有一个快速有效的解决方案,例如 data.table?我也希望通过名称来做到这一点,但也看看它如何处理列索引号!。

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    我们可以在多个列上应用log

    library(data.table)
    setDT(data1)[, names(data1)[3:5] := log(.SD), .SDcols = cat:score]
    data1
    #   StudentID Group       cat      fox     score
    #1:         1     A 0.6931472 1.098612 0.6931472
    #2:         2     A 1.3862944 0.000000 0.6931472
    #3:         3     B 0.0000000 1.609438 0.6931472
    #4:         4     B 1.0986123 0.000000 0.6931472
    #5:         5     B 0.6931472 1.609438 1.0986123
    

    【讨论】:

    • 完美!如果要在这些列中应用特定的方程式怎么办?例如取 log(1-value)/12
    • @bvowe 你可以做setDT(data1)[, names(data1)[3:5] := log(1 -.SD)/12, .SDcols = cat:score],但这里根据你得到的值和NaN
    • 如果我想使用我能做的实际 col 名称而不是 names(data1)[3:5],names(data1)[c("cat", "fox", "score" ] ?
    • @bvowe 你。可以传递列名的向量,即。 c("cat", "fox", "score") := 索引不正确。您可能需要带有数字的位置索引或使用match创建一个索引
    猜你喜欢
    • 2016-03-13
    • 2020-05-24
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    相关资源
    最近更新 更多