错误按行乘以所有行

时间:2018-04-13 02:46:08

标签: r

我最近遇到了一个错误,我有一个像Centroid这样的数据框(这是真实档案的一小部分)

$ (echo a; sleep 1; echo b; sleep 3; echo c; sleep 2; echo d; sleep 1) | ts -i
00:00:00 a
00:00:01 b
00:00:03 c
00:00:02 d
$ (echo a; sleep 1; echo b; sleep 3; echo c; sleep 2; echo d; sleep 1) | ts -i '%.s'
0.000010 a
0.983308 b
3.001129 c
2.001120 d

我还需要将每年的列添加到 X1989 X1990 X1991 LAT LON 1 10 11 10 -44,3517712669 -22,9847296224 2 12040 12040 14589 -42,2932250108 -22,7536045078 3 3 3 3 -43,9128279672 -22,4248877183 4 20 20 20 -44,2046056169 -22,4533649489 列和LAT列。

我尝试使用for循环

LON

但是我收到了这个错误:

  

col * Centroid [,29]中的错误:二元运算符的非数字参数。

1 个答案:

答案 0 :(得分:0)

这是dplyr::mutate_at可以提供帮助的好候选人。也不需要for-loop

显然,LATLON列中的数据包含逗号,,而且这些数据都是非数字列。

现在,首先使用mutate_atLATLON列转换为numeric(用,替换.后)然后使用mutate_at再次将列与年份相乘LAT

library(dplyr)

Centroid %>% mutate_at(vars(c("LAT","LON")),funs(as.numeric(gsub(",","\\.",.)))) %>%
  mutate_at(vars(starts_with("X")),funs(.*LAT))

#          X1989        X1990        X1991       LAT       LON
# 1    -443.5177    -487.8695    -443.5177 -44.35177 -22.98473
# 2 -509210.4291 -509210.4291 -617015.8597 -42.29323 -22.75360
# 3    -131.7385    -131.7385    -131.7385 -43.91283 -22.42489
# 4    -884.0921    -884.0921    -884.0921 -44.20461 -22.45336

数据:

Centroid <- read.table(text =
"X1989  X1990  X1991       LAT            LON
1     10    11    10   -44,3517712669 -22,9847296224
2  12040 12040 14589   -42,2932250108 -22,7536045078
3      3     3     3   -43,9128279672 -22,4248877183
4     20    20    20   -44,2046056169 -22,4533649489",
header = TRUE, stringsAsFactors = FALSE)