如何从列中复制数据并更改其数据?
例如,我在下面有这些数据,我想将winddir
中的所有数据复制到名为wd
的新数据中,但我想将任何N(北)更改为0(0度) )和任何S(南)到180(180度)等等,
timestamp date winddir
1 1412877113 09/10/2014 13:51 N
2 1412876508 09/10/2014 13:41 S
所以我的新数据是,
timestamp date winddir wd
1 1412877113 09/10/2014 13:51 N 0
2 1412876508 09/10/2014 13:41 S 180
复制列的工作线(但我不知道如何更改其数据)
dat$wd <- dat$winddir
任何想法?
答案 0 :(得分:2)
如果您希望它与N
和S
之外的其他方向一起使用,那么您需要嵌套ifelse
或其矢量化版本。但是矢量化的ifelse
并不容易获得。而且嵌套的ifelse
太多是不理想的。
但是,你也可以通过character
索引来解决它:
# Read in your data
dat <- read.table(header = TRUE, stringsAsFactors = FALSE, text = "
timestamp date winddir
1412877113 '09/10/2014 13:51' N
1412876508 '09/10/2014 13:41' S")
# Create a named vector of the degrees
tr <- c(N = 0, NE = 45, E = 90, SE = 135, S = 180, SW = 225, W = 270, NW = 315)
print(tr)
## N NE E SE S SW W NW
## 0 45 90 135 180 225 270 315
# We can then lookup the degrees with characters:
tr["E"]
## E
## 90
tr[c("NE", "SE")]
## NE SE
## 45 135
# Therefore, we can then use tr to look up the desired directions:
dat$wd <- tr[dat$winddir]
print(dat)
## timestamp date winddir wd
##1 1412877113 09/10/2014 13:51 N 0
##2 1412876508 09/10/2014 13:41 S 180
确保dat$winddir
是character
。
这也适用于NE,SW等。将其扩展到例如,这是微不足道的。 32个基点NbE,NNE等。
修改:或者,您可以按照以下等效方式保存您的查询:
dat <- within(dat, wd <- tr[winddir])
或者像@agstudy建议:
dat <- transform(dat, wd = tr[winddir])
答案 1 :(得分:1)
例如使用ifelse
:
dat <- transform(dat,wd= ifelse(windir=="N",0,180)