我最近遇到了一个错误,我有一个像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]中的错误:二元运算符的非数字参数。
答案 0 :(得分:0)
这是dplyr::mutate_at
可以提供帮助的好候选人。也不需要for-loop
。
显然,LAT
和LON
列中的数据包含逗号,
,而且这些数据都是非数字列。
现在,首先使用mutate_at
将LAT
和LON
列转换为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)