【发布时间】:2016-11-21 22:42:04
【问题描述】:
我使用了两种方法将数据(CSV 格式)导入 R。第一种方法没有 na.string 参数,而第二种方法有。我使用了第二个,因为某些字符串在导入后显示为"" 而不是NA,并且我想将所有缺失值标准化为NA。
data1<-read.csv("file.csv",stringsAsFactors=FALSE)
data2<-read.csv("file",stringsAsFactors=FALSE,na.string="")
我有 3 个变量作为指标。他们给"X" 表示是,""/NA 表示否。我尝试将以下函数应用于上面的data1 和data2。
df1<-data1%>%
mutate(Indicator_Institution=ifelse(Indicator_A=="X",1,
ifelse(Indicator_B=="X",2,
ifelse(Indicator_C=="X",3,NA))))
df2<-data2%>%
mutate(Indicator_Institution=ifelse(Indicator_A=="X",1,
ifelse(Indicator_B=="X",2,
ifelse(Indicator_C=="X",3,NA))))
df1 的ifelse 函数遍历所有条件,而df2 只运行第一个条件。知道为什么吗? na.string="" 的论点有什么不同?
可重现的例子:
> dput(droplevels(head(data1)))
structure(list(Indicator_A = c("X", "X", "X", "X", "", ""),
Indicator_B = c("", "", "", "", "X", "X"), Indicator_C = c("",
"", "", "", "", "")), .Names = c("Indicator_A", "Indicator_B",
"Indicator_C"), row.names = c(NA, 6L), class = "data.frame")
> dput(droplevels(head(data2)))
structure(list(Indicator_A = c("X", "X", "X", "X", NA, NA),
Indicator_B = c(NA, NA, NA, NA, "X", "X"), Indicator_C = c(NA_character_,
NA_character_, NA_character_, NA_character_, NA_character_,
NA_character_)), .Names = c("Indicator_A", "Indicator_B",
"Indicator_C"), row.names = c(NA, 6L), class = "data.frame")
【问题讨论】:
-
请展示一个可重现的例子。如果没有示例,其他人将如何知道您的数据中发生了什么。
na.string=""会将所有空白更改为NA。根据您之前的问题here,您似乎希望其他人做猜测。 -
实际上,我不太确定如何展示可重现的示例。数据框是通过导入 csv 文件获得的,而不是在 R 本身中创建的。关于如何改进我的答案的任何建议?
-
您可以在
dput中包含一个可重现的示例。即dput(droplevels(head(yourdata)))另外,它是na.strings而不是na.string您的示例似乎有 var1、var2、var3 作为列名,并且在代码中它是 Indicator_A、Indicator_B 等。 -
嗨,我添加了可重现的示例。似乎
na.strings和na.string都给了我同样的东西。
标签: r csv dplyr data-manipulation data-cleaning