替换 R 中数据框中的值
Replacing values in a dataframe in R
如果我有如下示例数据...
col_1 col_2
1 <blank>
2 5
3 6
4 ?
我如何编写一个自定义函数,让我用其他值替换某些值。例如,像下面这样的 for 循环允许我替换“?” 0s。对以下方法有什么想法吗?
data_clean = function(data)
{
for (item in data)
{
for (i in item)
{
if (i == '?'){replace(i,'?',0)}
else {do nothing}
}
}
}
你不需要循环来做到这一点。 Gsub 将允许您替换值
df1$col_2<-gsub("\?", 0, df1$col_2)
您可以使用 sapply 在所有列上执行此操作
sapply(df1, function(x) gsub("\?", 0, x))
如果要替换所有列中的 ?
,
data_clean <- function(data){
data[] <- lapply(data, function(x) replace(x, x=='?',0))
data}
data_clean(df1)
#col_1 col_2
#1 1 <blank>
#2 2 5
#3 3 6
#4 4 0
或者
data_clean2 <- function(data){
data[data=="?"] <- 0
data}
data_clean2(df1)
# col_1 col_2
#1 1 <blank>
#2 2 5
#3 3 6
#4 4 0
数据
df1 <-structure(list(col_1 = 1:4, col_2 = c("<blank>", "5", "6", "?"
)), .Names = c("col_1", "col_2"), class = "data.frame",
row.names = c(NA, -4L))
按照@akrun 的例子,另一种选择是:
clean <- function(x) ifelse(x == "?", 0, x)
data.frame(apply(df1, 2, clean))
如果我有如下示例数据...
col_1 col_2
1 <blank>
2 5
3 6
4 ?
我如何编写一个自定义函数,让我用其他值替换某些值。例如,像下面这样的 for 循环允许我替换“?” 0s。对以下方法有什么想法吗?
data_clean = function(data)
{
for (item in data)
{
for (i in item)
{
if (i == '?'){replace(i,'?',0)}
else {do nothing}
}
}
}
你不需要循环来做到这一点。 Gsub 将允许您替换值
df1$col_2<-gsub("\?", 0, df1$col_2)
您可以使用 sapply 在所有列上执行此操作
sapply(df1, function(x) gsub("\?", 0, x))
如果要替换所有列中的 ?
,
data_clean <- function(data){
data[] <- lapply(data, function(x) replace(x, x=='?',0))
data}
data_clean(df1)
#col_1 col_2
#1 1 <blank>
#2 2 5
#3 3 6
#4 4 0
或者
data_clean2 <- function(data){
data[data=="?"] <- 0
data}
data_clean2(df1)
# col_1 col_2
#1 1 <blank>
#2 2 5
#3 3 6
#4 4 0
数据
df1 <-structure(list(col_1 = 1:4, col_2 = c("<blank>", "5", "6", "?"
)), .Names = c("col_1", "col_2"), class = "data.frame",
row.names = c(NA, -4L))
按照@akrun 的例子,另一种选择是:
clean <- function(x) ifelse(x == "?", 0, x)
data.frame(apply(df1, 2, clean))