我有这个数据框
# of int. int. not.int. ID group odd even
2 24 85.15 113.34 2 thc1 NA 486.66
3 33 134.94 158.17 3 thc2 465.06 NA
4 12 47.60 62.73 4 thc3 NA 537.27
1 50 218.41 372.16 1 veh 381.59 NA
5 44 176.81 268.92 5 veh NA 331.08
如何替换“ int”中的数字。带有“偶数”的数字而不添加NA,以及“奇数”和“ not.int”的数字相同?所以看起来像这样。
# of int. int. not.int. ID group odd even
2 24 486.66 113.34 2 thc1 NA 486.66
3 33 134.94 465.06 3 thc2 465.06 NA
4 12 537.27 62.73 4 thc3 NA 537.27
1 50 218.41 381.59 1 veh 381.59 NA
5 44 331.08 268.92 5 veh NA 331.08
答案 0 :(得分:3)
一种选择是使用Map
中的base R
来获取相应的列,然后进行赋值
df1[2:3] <- Map(function(x, y) {
i1 <- !is.na(y)
x[i1] <- y[i1]
x}, df1[c('int.', 'not.int.')], df1[c('even', 'odd')])
df1
# # of int. int. not.int. ID group odd even
#2 24 486.66 113.34 2 thc1 NA 486.66
#3 33 134.94 465.06 3 thc2 465.06 NA
#4 12 537.27 62.73 4 thc3 NA 537.27
#1 50 218.41 381.59 1 veh 381.59 NA
#5 44 331.08 268.92 5 veh NA 331.08
df1 <- structure(list(`# of int.` = c(24L, 33L, 12L, 50L, 44L), int. = c(85.15,
134.94, 47.6, 218.41, 176.81), not.int. = c(113.34, 158.17, 62.73,
372.16, 268.92), ID = c(2L, 3L, 4L, 1L, 5L), group = c("thc1",
"thc2", "thc3", "veh", "veh"), odd = c(NA, 465.06, NA, 381.59,
NA), even = c(486.66, NA, 537.27, NA, 331.08)), .Names = c("# of int.",
"int.", "not.int.", "ID", "group", "odd", "even"),
class = "data.frame", row.names = c("2",
"3", "4", "1", "5"))
答案 1 :(得分:2)
使用mutate
包中的ifelse
和dplyr
:
library(dplyr)
df %>%
mutate(int. = ifelse(is.na(even), int., even),
not.int. = ifelse(is.na(odd), not.int., odd))
答案 2 :(得分:1)
这是基数R中的一个选项,带有ifelse
和is.na
。
dat$int <- with(dat, ifelse(!is.na(even), even, int))
dat$not.int <- with(dat, ifelse(!is.na(odd), odd, not.int))
数据
dat <- read.table(text = " '# of int' int 'not.int' ID group odd even
2 24 85.15 113.34 2 thc1 NA 486.66
3 33 134.94 158.17 3 thc2 465.06 NA
4 12 47.60 62.73 4 thc3 NA 537.27
1 50 218.41 372.16 1 veh 381.59 NA
5 44 176.81 268.92 5 veh NA 331.08",
header = TRUE, stringsAsFactors = FALSE)
答案 3 :(得分:1)
x <- df1[c("even","odd")]
df1[c("int.","not.int.")][!is.na(x)] <- x[!is.na(x)]
# # of int. int. not.int. ID group odd even
# 2 24 486.66 113.34 2 thc1 NA 486.66
# 3 33 134.94 465.06 3 thc2 465.06 NA
# 4 12 537.27 62.73 4 thc3 NA 537.27
# 1 50 218.41 381.59 1 veh 381.59 NA
# 5 44 331.08 268.92 5 veh NA 331.08