chr*_*isg 49 r subset reshape na
我一直在遇到我认为的错误.这不是什么大问题,但我很好奇是否有其他人看过这个.不幸的是,我的数据是保密的,所以我必须要弥补的例子,它不会是非常有益的.
当子集化我的数据,我偶尔得到不在我的原始数据帧神秘NA行.甚至rownames都是NA.例如:
example <- data.frame("var1"=c("A", "B", "A"), "var2"=c("X", "Y", "Z"))
example
var1 var2
1 A X
2 B Y
3 A Z
Run Code Online (Sandbox Code Playgroud)
然后我跑:
example[example$var1=="A",]
var1 var2
1 A X
3 A Z
NA<NA> <NA>
Run Code Online (Sandbox Code Playgroud)
当然,上面的例子实际上并没有给你这个神秘的NA行; 我在这里添加它来说明我对数据的问题.
也许这与我使用Google的read.xlsx包导入我的原始数据集然后在子集化之前执行从长到长的重塑这一事实有关.
谢谢
c-u*_*hin 43
包裹条件which:
df[which(df$number1 < df$number2), ]
Run Code Online (Sandbox Code Playgroud)
这个怎么运作:
它返回条件匹配的行号(条件所在的位置TRUE),并相应地对这些行上的数据帧进行子集化.
比如说:
which(df$number1 < df$number2)
Run Code Online (Sandbox Code Playgroud)
返回的行数1,2,3,4和5.
因此,写作:
df[which(df$number1 < df$number2), ]
Run Code Online (Sandbox Code Playgroud)
与写作相同:
df[c(1, 2, 3, 4, 5), ]
Run Code Online (Sandbox Code Playgroud)
或者更简单的版本是:
df[1:5, ]
Run Code Online (Sandbox Code Playgroud)
Wal*_*cio 24
我看到OP已经回答了这个问题,但是由于他的评论深深埋藏在评论部分中,这是我尝试解决这个问题(至少我的数据,行为方式相同).
首先,一些样本数据:
> df <- data.frame(name = LETTERS[1:10], number1 = 1:10, number2 = c(10:3, NA, NA))
> df
name number1 number2
1 A 1 10
2 B 2 9
3 C 3 8
4 D 4 7
5 E 5 6
6 F 6 5
7 G 7 4
8 H 8 3
9 I 9 NA
10 J 10 NA
Run Code Online (Sandbox Code Playgroud)
现在换一个简单的过滤器:
> df[df$number1 < df$number2, ]
name number1 number2
1 A 1 10
2 B 2 9
3 C 3 8
4 D 4 7
5 E 5 6
NA <NA> NA NA
NA.1 <NA> NA NA
Run Code Online (Sandbox Code Playgroud)
这里的问题是NA第三列中s 的存在导致R将整行重写为NA.尽管如此,仍保持数据框尺寸.这是我的修复,需要知道哪个列包含NAs:
> df[df$number1 < df$number2 & !is.na(df$number2), ]
name number1 number2
1 A 1 10
2 B 2 9
3 C 3 8
4 D 4 7
5 E 5 6
Run Code Online (Sandbox Code Playgroud)
小智 11
使用类似于您发布的代码时,我遇到了同样的问题.使用函数子集()
subset(example,example$var1=="A")
Run Code Online (Sandbox Code Playgroud)
相反,NA行被排除在外.
小智 5
我发现使用 %in$ 而不是 == 可以解决这个问题,尽管我仍然想知道为什么。例如,不要使用: df[df$num == 1,],而是使用: df[df$num %in% c(1),] 即可。