我有一个数据框,有些列有NA
值.
如何NA
用零替换这些值?
我有一个巨大的向量,它有几个NA
值,我试图找到该向量中的最大值(向量是所有数字),但由于NA
值,我不能这样做.
如何删除NA
值以便我可以计算最大值?
我将.csv文件中的数据读取到Pandas数据帧,如下所示.对于其中一列,即id
我想将列类型指定为int
.问题是id
系列缺少/空值.
当我尝试id
在读取.csv时将列转换为整数时,我得到:
df= pd.read_csv("data.csv", dtype={'id': int})
error: Integer column has NA values
Run Code Online (Sandbox Code Playgroud)
或者,我尝试在阅读后转换列类型,如下所示,但这次我得到:
df= pd.read_csv("data.csv")
df[['id']] = df[['id']].astype(int)
error: Cannot convert NA to integer
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题?
我想知道如何省略NA
数据框中的值,但只在我感兴趣的某些列中.
例如,
DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))
Run Code Online (Sandbox Code Playgroud)
但我只是想省略其中的数据y
是NA
,因此结果应该是
x y z
1 1 0 NA
2 2 10 33
Run Code Online (Sandbox Code Playgroud)
na.omit
似乎删除所有行包含任何NA
.
有人可以帮我解决这个简单的问题吗?
但如果现在我改变了这样的问题:
DF <- data.frame(x = c(1, 2, 3,NA), y = c(1,0, 10, NA), z=c(43,NA, 33, NA))
Run Code Online (Sandbox Code Playgroud)
如果我只想省略x=na
或者z=na
,我可以|
在哪里放入函数?
我通常更喜欢编码R,以便我不会收到警告,但我不知道在使用as.numeric
转换字符向量时如何避免收到警告.
例如:
x <- as.numeric(c("1", "2", "X"))
Run Code Online (Sandbox Code Playgroud)
会给我一个警告,因为它通过强制引入了NA.我希望通过强制来引入NA - 有没有办法告诉它"是的,这就是我想做的事情".或者我应该接受警告?
或者我应该使用不同的功能来执行此任务?
我们有一个CSV文件的数据框.数据框DF
包含包含观察值的列和VaR2
包含测量日期的列().如果未记录日期,则CSV文件包含NA
缺失数据的值.
Var1 Var2
10 2010/01/01
20 NA
30 2010/03/01
Run Code Online (Sandbox Code Playgroud)
我们希望使用subset命令来定义一个新的数据框new_DF
,使其只包含具有NA'
column(VaR2
)值的行.在给出的示例中,只有第2行将包含在新的中DF
.
命令
new_DF<-subset(DF,DF$Var2=="NA")
Run Code Online (Sandbox Code Playgroud)
不起作用,结果数据框没有行条目.
如果在原始CSV文件NA
中交换 了值NULL
,则相同的命令会产生所需的结果:new_DF<-subset(DF,DF$Var2=="NULL")
.
如果字符串NA
在原始CSV文件中提供了值,那么如何使此方法有效?
我尝试使用dplyr管道从子集中删除NA.我的回答是错过了一步的迹象.我正在尝试学习如何使用dplyr编写函数:
> outcome.df%>%
+ group_by(Hospital,State)%>%
+ arrange(desc(HeartAttackDeath,na.rm=TRUE))%>%
+ head()
Source: local data frame [6 x 5]
Groups: Hospital, State
Run Code Online (Sandbox Code Playgroud)
Hospital State HeartAttackDeath 1 ABBEVILLE AREA MEDICAL CENTER SC NA 2 ABBEVILLE GENERAL HOSPITAL LA NA 3 ABBOTT NORTHWESTERN HOSPITAL MN 12.3 4 ABILENE REGIONAL MEDICAL CENTER TX 17.2 5 ABINGTON MEMORIAL HOSPITAL PA 14.3 6 ABRAHAM LINCOLN MEMORIAL HOSPITAL IL NA Variables not shown: HeartFailureDeath (dbl), PneumoniaDeath (dbl)
有很多关于替换NA值的帖子.我知道可以用以下内容替换下表/框架中的NA:
x[is.na(x)]<-0
Run Code Online (Sandbox Code Playgroud)
但是,如果我想将其限制为仅某些列,该怎么办?让我给你看一个例子.
首先,让我们从数据集开始.
set.seed(1234)
x <- data.frame(a=sample(c(1,2,NA), 10, replace=T),
b=sample(c(1,2,NA), 10, replace=T),
c=sample(c(1:5,NA), 10, replace=T))
Run Code Online (Sandbox Code Playgroud)
这使:
a b c
1 1 NA 2
2 2 2 2
3 2 1 1
4 2 NA 1
5 NA 1 2
6 2 NA 5
7 1 1 4
8 1 1 NA
9 2 1 5
10 2 1 1
Run Code Online (Sandbox Code Playgroud)
好的,所以我只想将替换限制为列'a'和'b'.我的尝试是:
x[is.na(x), 1:2]<-0
Run Code Online (Sandbox Code Playgroud)
和:
x[is.na(x[1:2])]<-0
Run Code Online (Sandbox Code Playgroud)
哪个不起作用.
我的data.table尝试,在哪里y<-data.table(x)
,显然永远不会起作用:
y[is.na(y[,list(a,b)]), ]
Run Code Online (Sandbox Code Playgroud)
我想在is.na参数中传递列,但显然不起作用.
我想在data.frame和data.table中执行此操作.我的最终目标是在'a'和'b'中将1:2重新编码为0:1,同时保持'c'的方式,因为它不是逻辑变量.我有一堆列,所以我不想一个接一个地做.而且,我只想知道如何做到这一点.
你有什么建议吗?
我有一个data.frame包含一些包含所有NA值的列,如何从data.frame中删除它们.
我可以使用这个功能吗?
na.omit(...)
Run Code Online (Sandbox Code Playgroud)
指定一些额外的参数?
检测向量NA
在R中是否至少有1的最快方法是什么?我一直在用:
sum( is.na( data ) ) > 0
Run Code Online (Sandbox Code Playgroud)
但这需要检查每个元素,强制和和函数.