如何将多个特定列乘以 R 中的常量或表达式?

时间:2021-06-18 21:18:35

标签: r

如何将某些特定列乘以表达式? 例如我有 9 列,但我希望 2 到 9 乘以表达式 28.8372*28.8372*0.0001

我写了这个,但没有意义:

df<-read.table(text="year   veg wetland crop    grass   Urban   Soiol   water   Total
2005    21430607    1367412 1190076 26545075    46618   39273   85208   709857278
2006    20679662    2019488 1167270 26673076    47338   35501   81914   709857278
2007    21111969    1476695 1133977 26811365    47839   38140   82477   709857278
2008    21393529    1171087 1223445 26757701    48063   27112   83323   709857278
2009    21707049    890611  1312864 26645771    49623   16910   81429   709857278
2010    20646100    2020408 1298895 26583630    50637   18467   86133   709857278
2011    20886556    1827600 1370779 26457435    51225   17341   93306   709857278
2012    21132326    1602643 1513077 26281770    53145   23551   97760   709857278
2013    19720346    2989292 1685743 26116417    54487   33398   104469  709857278
2014    19926085    2734241 2164979 25690817    55699   27513   104913  709857278
2015    20691165    1816887 2291247 25713225    56924   27638   107166  709857278
2016    19989336    2440118 2534635 25553211    57758   26041   103128  709857278
2017    20640458    1637314 2772866 25468701    57838   26098   100855  709857278
2018    19705954    2458960 3074894 25276010    59308   28252   100611  709857278", sep="", header=TRUE)

df%>%
  summarise(across(['Veg':'water']*(28.8372*28.8372*0.0001))

3 个答案:

答案 0 :(得分:3)

我希望这就是你要找的:

library(dplyr)

df %>%
  mutate(across(2:9, ~ .x * (28.8372*28.8372*0.0001)))

   year     veg   wetland      crop   grass    Urban    Soiol    water    Total
1  2005 1782135 113711.81  98964.83 2207446 3876.679 3265.880 7085.762 59030603
2  2006 1719688 167937.41  97068.32 2218091 3936.553 2952.207 6811.838 59030603
3  2007 1755638 122799.61  94299.72 2229590 3978.215 3171.662 6858.656 59030603
4  2008 1779052  97385.73 101739.74 2225128 3996.843 2254.591 6929.008 59030603
5  2009 1805124  74061.80 109175.68 2215820 4126.570 1406.209 6771.506 59030603
6  2010 1716897 168013.92 108014.04 2210652 4210.892 1535.686 7162.683 59030603
7  2011 1736893 151980.31 113991.80 2200158 4259.790 1442.050 7759.179 59030603
8  2012 1757331 133273.24 125825.08 2185550 4419.454 1958.464 8129.566 59030603
9  2013 1639913 248584.77 140183.71 2171800 4531.052 2777.325 8687.476 59030603
10 2014 1657022 227375.14 180036.21 2136408 4631.840 2287.937 8724.398 59030603
11 2015 1720644 151089.43 190536.46 2138271 4733.709 2298.332 8911.754 59030603
12 2016 1662281 202916.33 210776.22 2124964 4803.063 2165.528 8575.961 59030603
13 2017 1716428 136156.43 230587.13 2117937 4809.716 2170.268 8386.941 59030603
14 2018 1638716 204483.20 255703.30 2101913 4931.959 2349.391 8366.651 59030603

答案 1 :(得分:3)

您可以使用以下基本 R 代码

df[-1] <- df[-1]* 28.8372*28.8372*0.0001

答案 2 :(得分:3)

我们也可以使用 summarise,因为 summarise 可以返回多于一行。请注意,summarise 仅返回传递的列,通常它用于为每列返回一个值(或者如果它被分组,则每列每组一个值)。最有可能的是,OP 需要 mutate,如@Anoushiravan R 在帖子中所示

library(dplyr)
df %>%
   summarise(across(veg:water, ~ . * 28.8372*28.8372*0.0001))

OP 代码中的问题是尝试使用 [](不需要)而不使用 lambda 表达式对列范围进行子集化