假设我有一个矩阵或数据框,我只想要那些大于15且没有85到90之间的值的值
a<-matrix(1:100,nrow = 10, ncol = 10)
rownames(a) <- LETTERS[1:10]
colnames(a) <- LETTERS[1:10]
A B C D E F G H I J
A 1 11 21 31 41 51 61 71 81 91
B 2 12 22 32 42 52 62 72 82 92
C 3 13 23 33 43 53 63 73 83 93
D 4 14 24 34 44 54 64 74 84 94
E 5 15 25 35 45 55 65 75 85 95
F 6 16 26 36 46 56 66 76 86 96
G 7 17 27 37 47 57 67 77 87 97
H 8 18 28 38 48 58 68 78 88 98
I 9 19 29 39 49 59 69 79 89 99
J 10 20 30 40 50 60 70 80 90 100
现在我希望我的结果采用这样的格式,即只保留大于5且小于85的值,并删除所有其他值并替换为空格。 我想要的就像下面
A B C D E F G H I J
A 11 21 31 41 51 61 71 81 91
B 12 22 32 42 52 62 72 82 92
C 13 23 33 43 53 63 73 83 93
D 14 24 34 44 54 64 74 84 94
E 5 15 25 35 45 55 65 75 85 95
F 6 16 26 36 46 56 66 76 96
G 7 17 27 37 47 57 67 77 97
H 8 18 28 38 48 58 68 78 98
I 9 19 29 39 49 59 69 79 99
J 10 20 30 40 50 60 70 80 100
R中是否有任何类型的功能可以满足我的条件并产生所需的结果。我想根据问题更改代码。我在堆栈流中搜索了它,但没有找到类似的东西。我不想基于行或列进行格式化。 我试过了 一个[A&GT; 5&amp;一个!= C(85:90)] 但这给了我价值并且失去了结构。
答案 0 :(得分:4)
假设'a'为matrix
,我们可以将'a'%in%
86:90或|
小于5(a < 5
)的值指定为NA。在此,我没有将其分配给''
,因为它会将班级从numeric
更改为character
。此外,分配给NA
对以后的处理也很有用。
a[a %in% 86:90 | a<5] <- NA
但是,如果我们需要它''
a[a %in% 86:90 | a<5] <- ""
如果我们使用data.frame
a1 <- as.data.frame(a)
a1[] <- lapply(a1, function(x) replace(x, x %in% 86:90| x <5, ""))
a1
# A B C D E F G H I J
#A 11 21 31 41 51 61 71 81 91
#B 12 22 32 42 52 62 72 82 92
#C 13 23 33 43 53 63 73 83 93
#D 14 24 34 44 54 64 74 84 94
#E 5 15 25 35 45 55 65 75 85 95
#F 6 16 26 36 46 56 66 76 96
#G 7 17 27 37 47 57 67 77 97
#H 8 18 28 38 48 58 68 78 98
#I 9 19 29 39 49 59 69 79 99
#J 10 20 30 40 50 60 70 80 100
注意:这会将每列的class
更改为character
在OP的代码中,a!=c(85:90)
将不会按预期工作,因为85:90
将循环到'a'的长度,并且比较将在循环值中的相应值之间和'一个'。相反,我们需要%in%
使用vector
length
&gt; 1。