让我有这样一个数据框(df):
DF:
header1 header2
------ -------
45 76
54 89
- 12
45 32
12 34
- 5
45 34
65 54
我想获得这样的数据帧
header1 header2
------ -------
45 76
54 89
- -
45 32
12 34
- -
45 34
65 54
即我想将header2 columsn中的值替换为“ - ”,列header1的哪些行具有“ - ”值。
我怎样才能在R中这样做?我会很高兴得到任何帮助。非常感谢。
答案 0 :(得分:3)
如果您df
的两列都是字符向量,则可以执行以下操作:
# You can convert your columns to character with
df[,1:2] <- lapply(df[,1:2], as.character)
df$header2[df$header1 == "-"] <- "-" # Replace values
> df
# header1 header2
#1 45 76
#2 54 89
#3 - -
#4 45 32
#5 12 34
#6 - -
#7 45 34
#8 65 54
答案 1 :(得分:1)
传统上,我建议使用dplyr
,因为它在处理数据框时会产生美化可读的工作流程。
set.seed(1)
dta <- data.frame(colA = c(12,22,34,"-",23,"-"),
colB = round(runif(n = 6, min = 1, max = 100),0))
Vectorize(require)(package = c("dplyr", "magrittr"),
character.only = TRUE)
dta %<>%
mutate(colB = ifelse(colA == "-", "-", colA))
这会给你以下结果:
> head(dta)
colA colB
1 12 2
2 22 3
3 34 5
4 - -
5 23 4
6 - -
这是一种非常灵活的机制,但如果您认为列类可能具有相关性,则可以在应用任何其他转换之前选择运行mutate_each(funs(as.character))
。