首页 > 解决方案 > 将数字添加到数据帧中的所有零并进行对数转换

问题描述

我有一个看起来像这样的数据框:

df1 <- structure(list(Name = c("Mark", "Anders", "Tom", "Vin", "Marcel", 
"Tyta", "Gerta", "Moses", "Hank", "Rita", "Margary"), Col = c(1769380097.5, 
1444462500, 1499146687.5, 1276309375, 22279500, 3114023471, 2961012500, 
3978937423.5, 1703925000, 1838885550, 0), item1 = c(1534931323.07692, 
1794881375, 2292661687.5, 855786250, 21915500, 3056061512.25, 
3581940000, 3766909703.25, 2043300000, 2135859875, 1482031250
), item2 = c(1628137500, 1781982737.5, 1659391250, 741220687.5, 
41242000, 2833327766.38514, 3675450000, 3592650662.5, 1586512500, 
1934575000, 1467271250), item3 = c(1545572702.88461, 1748600000, 
1745026687.5, 1556481250, 0, 3551716021.25, 3108137500, 3718036445, 
1380278750, 2217526000, 1026813750)), .Names = c("Name", "Col", 
"dKO1", "dKO2", "sdi1"), row.names = c(29L, 30L, 1278L, 1295L, 
1296L, 1297L, 1298L, 1307L, 1642L, 1674L, 1754L), class = "data.frame")

> df1
        Name        Col       dKO1       dKO2       sdi1
29      Mark 1769380098 1534931323 1628137500 1545572703
30    Anders 1444462500 1794881375 1781982738 1748600000
1278     Tom 1499146688 2292661688 1659391250 1745026688
1295     Vin 1276309375  855786250  741220688 1556481250
1296  Marcel   22279500   21915500   41242000          0
1297    Tyta 3114023471 3056061512 2833327766 3551716021
1298   Gerta 2961012500 3581940000 3675450000 3108137500
1307   Moses 3978937424 3766909703 3592650662 3718036445
1642    Hank 1703925000 2043300000 1586512500 1380278750
1674    Rita 1838885550 2135859875 1934575000 2217526000
1754 Margary          0 1482031250 1467271250 1026813750

一些值为零。我想在整个数据框中为这些数字添加 0.00001。然后,我想记录转换所有列,不包括第一列。我怎样才能做到这一点?

标签: rdataframe

解决方案


使用dplyr您必须做两件事才能获得所需的结果:

df1[df1==0] <- 0.00001
df1 %>%
  mutate_at(vars(-Name), log)

但是,由于您想log在列上使用 a,我建议您跳过该df1[df1==0] <- 0.00001部分并替换-Inflogwith0NA或您需要的任何值创建的部分。


推荐阅读