我有以下数据框
>data.frame
col1 col2
A
x B
C
D
y E
我需要一个新的数据框,如下所示:
>new.data.frame
col1 col2
A
x
C
D
y
我只需要一个从col1读取的方法,如果Col1中有任何字符,则清除col2的相应行值。我正在考虑使用if语句和data.table,但不确定如何根据col1中存在的任何字符来中继删除col2值的信息。
答案 0 :(得分:2)
这样的工作:
# Create data frame
dat <- data.frame(col1=c(NA,"x", NA, NA, "y"), col2=c("A", "B", "C", "D", "E"))
# Create new data frame
dat_new <- dat
dat_new$col2[!is.na(dat_new$col1)] <- NA
# Check that it worked
dat
dat_new
答案 1 :(得分:1)
这取决于'删除'的含义。这里我假设一个空字符串""
。但是,同样的原则适用于NA
s
## create data frame
df <- data.frame(col1 = c("", "x", "","", "y"),
col2 = LETTERS[1:5],
stringsAsFactors = FALSE)
df
# col1 col2
# 1 A
# 2 x B
# 3 C
# 4 D
# 5 y E
## subset by blank values in col1, and replace the values in col2
df[df$col1 != "",]$col2 <- ""
## or df$col2[df$col1 != ""] <- ""
df
# col1 col2
# 1 A
# 2 x
# 3 C
# 4 D
# 5 y
正如您提到的data.table
,其代码为
library(data.table)
setDT(df)
## filter by blank entries in col1, and update col2 by-reference (:=)
df[col1 != "", col2 := ""]
df
答案 2 :(得分:1)
使用dplyr
library(dplyr)
df %>%
mutate(col2 = replace(col2, col1!="", ""))
# col1 col2
#1 A
#2 x
#3 C
#4 D
#5 y