【发布时间】:2026-02-23 17:50:02
【问题描述】:
这是我的数据框:
x<-structure(list(ABEV3 = c(1, -0.0329694340790399, -0.600795689797522,
-0.300219759273298), AZUL4 = c(-0.0329694340790399, 1, 0.531987810491871,
0.884036954118666), BTOW3 = c(-0.600795689797522, 0.531987810491871,
1, 0.612824308045668), B3SA3 = c(-0.300219759273298, 0.884036954118666,
0.612824308045668, 1)), row.names = c("ABEV3", "AZUL4", "BTOW3",
"B3SA3"), class = "data.frame")
我想删除所有符合此条件的值:如果 x[i,j] 大于 0.85 且小于 0.99,它将保留在我的数据框中(保留行和列名):
所以我这样做了:
y<- x>0.35 & x<0.99
但是当我运行时:x[y] 它不是数据框。而且它不保留列/行名称。
如何使用相同的步骤更正此问题?即,使用逻辑矩阵 y ?
我的最终输出应该是这个:
out<-structure(c(0.5319878, 0.884037, 0.53198781, 0.88403695, 0.6128243,
0.5319878), .Dim = 3:2, .Dimnames = list(c("AZUL4", "BTOW3",
"B3SA3"), c("BTOW3", "B3SA3")))
PS:这个想法只是从我的 x data.frame 中删除与x>0.85 & x<0.99 标准不匹配的值。
【问题讨论】:
-
y是一个和你的框架一样大的矩阵。当您说“删除所有值”时,您的意思是“将它们替换为NA”,还是在R中无法完成的操作“使框架中的那些单元格完全为空” 。 (从技术上讲,您可以将所有列转换为列表列,以便允许NULL,但它会破坏很多东西并且难以使用。) -
了解您的预期输出是很有用的。 编辑:试试
x[!y] <- NA。 -
伙计们,我将编辑问题。
-
@Laura then: x[!y]
-
您想要一个基本解决方案,在 cmets 和答案中得到一个单行,然后接受非基本解决方案?奇怪,*耸耸肩*。
标签: r logical-operators