我有一个字符向量,看起来像:
"Internet" "Internet" "-1" "-5" "Internet" "Internet"
Run Code Online (Sandbox Code Playgroud)
我想替换所有可能是负数值(-1,-5等)的值NA
.
我用这段代码做到了:
hintsData$WhereSeekHealthInfo[hintsData$WhereSeekHealthInfo < 0] <- NA
Run Code Online (Sandbox Code Playgroud)
这似乎有效:
head(hintsData$WhereSeekHealthInfo)
# [1] "Internet" "Internet" NA NA "Internet" "Internet"
Run Code Online (Sandbox Code Playgroud)
但是当我这样做的时候
> sum(hintsData$WhereSeekHealthInfo == "Internet")
# [1] NA
Run Code Online (Sandbox Code Playgroud)
基本上我不能再将这些值相加,因为我以某种方式改变了矢量?
在运行NA代码之前,我能够运行代码并获得:
> sum(hintsData$WhereSeekHealthInfo == "Internet")
# [1] 1691
Run Code Online (Sandbox Code Playgroud)
那么,如何用NA替换"-1"," - 5"等值,但仍然得到:
> sum(hintsData$WhereSeekHealthInfo == "Internet")
# [1] 1691
Run Code Online (Sandbox Code Playgroud)
如果您有任何想法,请告诉我.我确实找到了关于用NA替换的其他问题但是因为我不知道为什么一旦我用NA替换我就不能再计算值了我不知道要搜索什么或排除.
我正在使用条形图(和表格)来显示字符串数据分布.我有NA和空字符串,但是,在条形图中它们是不可区分的.参见例如:
a <- c('a','a','b',NA,'')
barplot(table(a,useNA='always'))
Run Code Online (Sandbox Code Playgroud)
有关如何自动添加"NA"标签以区分NA和空字符串的任何想法?
我正在处理一些RNA-seq计数数据,我有大约60,000个包含基因名称的列和24个包含样本名称的行.当我做了一些基因名称转换时,我留下了一堆被命名的列NA
.我知道R的处理NA
方式与典型的列名不同,我的问题是如何删除这些列.这是我的数据的一个例子.
"Gene1" "Gene2" "Gene3" NA "Gene4"
1 10 11 12 10 15
2 13 12 50 40 30
3 34 23 23 21 22
Run Code Online (Sandbox Code Playgroud)
我想它最终会像
"Gene1" "Gene2" "Gene3" "Gene4"
1 10 11 12 15
2 13 12 50 30
3 34 23 23 22
Run Code Online (Sandbox Code Playgroud)
我确实找到了一些适用于其他人但不适合我的R代码
df<-df[, grep("^(NA)", names(df), value = TRUE, invert = TRUE)]
Run Code Online (Sandbox Code Playgroud) 而不是for循环,是否有一种简短而有效的方法来为数据框中该列的NA分配最近的可用值?例如,有一个数据帧DF
DF <- data.frame(x = c(1:10), y1 = c(0, 10, NA,5, 20,30,7,8,9,11), y2 = c(NA, 0, NA,5, 20,30,7,8,NA,NA), z = c(95,94,90:87,88,89,90,91))
x y1 y2 z
1 1 0 NA 95
2 2 10 0 94
3 3 NA NA 90
4 4 5 5 89
5 5 20 20 88
6 6 30 30 87
7 7 7 7 88
8 8 8 8 89
9 9 9 NA 90
10 10 11 NA 91
Run Code Online (Sandbox Code Playgroud)
而最终的DF应该是
x y1 y2 z …
Run Code Online (Sandbox Code Playgroud) 我有一个大的data.table对象(1M行和220列),我想用NA替换所有空格('').我在这篇帖子中找到了一个解决方案,但是我的数据表速度非常慢(已超过15分钟)其他帖子的示例:
data = data.frame(cats=rep(c('', ' ', 'meow'),1e6),
dogs=rep(c("woof", " ", NA),1e6))
system.time(x<-apply(data, 2, function(x) gsub("^$|^ $", NA, x)))
Run Code Online (Sandbox Code Playgroud)
有没有更多的data.table快速实现这一目标的方法?
实际上,提供的数据与原始数据看起来不太像,只是举一个例子.我的实际数据的以下子集给出了CharToDate(x)错误:
DT <- data.table(ID=c(10),DEFAULT_DATE=as.Date("2012-07-31"),value='')
system.time(DT[DT=='']<-NA)
Run Code Online (Sandbox Code Playgroud) 我有3500个观测数据框和278个变量.对于从第一列开始的每一行,我想用NA替换第一个NA之后出现的所有值.例如,我想从像这样的数据框:
X1 X2 X3 X4 X5
1 3 NA 6 9
1 NA 4 6 18
6 7 NA 3 1
10 1 2 NA 2
Run Code Online (Sandbox Code Playgroud)
喜欢的东西
X1 X2 X3 X4 X5
1 3 NA NA NA
1 NA NA NA NA
6 7 NA NA NA
10 1 2 NA NA
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下嵌套for循环,但它没有终止:
for(i in 2:3500){
firstna <- min(which(is.na(df[i,])))
df[i, firstna:278] <- NA
}
Run Code Online (Sandbox Code Playgroud)
有没有更有效的方法来做到这一点?提前致谢.
我有一个包含一些NA
元素的矩阵(例如mat
下面),我想创建一个新函数,用NA
隐藏的值打印它(fun
如下所示).我怎样才能做到这一点?
mat <- cbind(c(1,2,NA,NA),c(3,3,3,NA),c(NA,4,4,4),c(NA,NA,5,5))
print(mat)
[,1] [,2] [,3] [,4]
[1,] 1 3 NA NA
[2,] 2 3 4 NA
[3,] NA 3 4 5
[4,] NA NA 4 5
fun(mat)
[,1] [,2] [,3] [,4]
[1,] 1 3
[2,] 2 3 4
[3,] 3 4 5
[4,] 4 5
Run Code Online (Sandbox Code Playgroud) Age <- c(90,56,51,'NULL',67,'NULL',51)
Sex <- c('Male','Female','NULL','male','NULL','Female','Male')
Tenure <- c(2,'NULL',3,4,3,3,4)
df <- data.frame(Age, Sex, Tenure)
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,有'NULL'值作为字符/字符串格式.我试图用NA来代替'NULL'值.我能够将它用于单个列df$age[which(df$Age=='NULL)]<-NA'
但是我不想为所有列写这个.
如何将类似的逻辑应用于所有列,以便将所有'NULL'
值df
转换为NAs
?我猜测apply
或自定义函数或for循环将做到这一点.
我有以下数据框:
RawTimes_df =
ETime XTime
0 2018-05-21 04:48:22 2018-05-21 05:52:45
1 2018-05-21 02:18:20 2018-05-21 03:19:53
2 2018-05-21 11:02:31 2018-05-21 12:17:57
3 2018-05-21 06:08:15 2018-05-21 07:08:12
4 NA 2018-05-21 16:14:16
5 2018-05-21 03:38:12 2018-05-21 04:39:05
6 2018-05-21 17:43:06 2018-05-21 18:59:38
7 2018-05-21 08:52:32 NA
8 2018-05-21 02:27:44 2018-05-21 03:33:08
9 2018-05-21 12:01:12 NA
10 2018-05-21 10:21:10 2018-05-21 11:26:45
11 NA 2018-05-21 21:27:38
12 2018-05-21 18:02:19 2018-05-21 19:07:31
13 2018-05-21 05:07:28 2018-05-21 06:07:51
14 NA 2018-05-21 13:10:22
15 2018-05-21 11:05:19 2018-05-21 12:17:31 …
Run Code Online (Sandbox Code Playgroud) 我试图计算具有整个df的NA的行数,因为我想计算具有NA的行占df的总行数的百分比。
我已经看过这篇文章:确定具有NA的行数,但它仅显示特定范围的列。