- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个数据框。
第一个保存我的实际数据,我们称之为数据。第二个用作指示矩阵,它是使用 if-else 语句构造的,该语句检查是否出现一行至少包含 1 或 2 的值,我们称之为 indic。
这是一个例子:
col1<-c(1,3,1,3,2)
col2<-c(3,4,2,3,"")
col3<-c(1,3,"","","")
col4<-c(2,"","","","")
data<-data.frame(cbind(col1,col2,col3,col4))
> data
col1 col2 col3 col4
1 3 1 2
3 4 3
1 2
3 3
2
data 的行必须包含至少一个 1 或 2,所以这是我的函数:
remove<-function(x){
if (((x[1] == "1") | (x[1] == "2")) | ((x[2] == "1") | (x[2] == "2"))
| ((x[3] == "1") | (x[3] == "2")) | ((x[4] == "1") | (x[4] == "2"))){
return(0)
}
else{
return(1)
}
}
indic<-data.frame(apply(data,1,remove))
> indic
y
1 0
2 1
3 0
4 1
5 0
从数据来看,第2行和第4行至少不包含1或2,这已被indic证实。
我想删除 data 中的第 2 行和第 4 行,它们对应于 indic 中的第 2 行和第 4 行。我已经尝试过以下方法:
finalMatrix<-class(array)
for(i in 1:nrow(indic)){
if (indic[i,1] == "1"){
finalMatrix = data[-i,]
}
else{
data[i,] = data[i,]
}
}
但是,我的输出是这样的:
> finalMatrix
col1 col2 col3 col4
1 3 1 2
3 4 3
1 2
2
这仅有效地消除了第四行。我认为这可能与我必须在每次迭代后创建一个新数据框这一事实有关,但问题是迭代长度会发生变化。
想知道我的代码是否走在正确的轨道上……任何建议都会很好。一段时间以来,我一直在考虑这个问题。
-索夫
最佳答案
您可以尝试生成一个 TRUE/FALSE 向量而不是包含 0/1 的印度向量。这使得最终过滤更加明显。
> data
col1 col2 col3 col4
1 1 3 1 2
2 3 4 3
3 1 2
4 3 3
5 2
使用 any
可以轻松访问 1
或 2
行的内容。如果满足两个条件之一,第二个 any
会告诉您。如果第二个参数设置为 1,则 apply()
会遍历所有行。
indic <- apply(data, 1, function(row) {
any(c(any(row == 1), any(row == 2)))
})
> indic
[1] TRUE FALSE TRUE FALSE TRUE
> data[indic,]
col1 col2 col3 col4
1 1 3 1 2
3 1 2
5 2
正如您问题的标题所暗示的,indic-vector 也可以应用于另一个数据框,但在这里重要的是要注意数据框和 indic-vector 具有相同的维度或旨在向量回收。
采纳@nicola 关于使用矢量化的建议。
data[rowSums(data=="1" | data=="2")>0,]
这将最有效地完成工作,节省循环并创建 indic
。尽管从 rowSums(data=="1"| data=="2")>0
发出的 TRUE/FALSE 向量仍然可以保存在变量中。
关于r - 删除数据框中的行,这些行在另一个数据框的相应行中具有特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43851936/
我在 Java 中遇到异常处理问题,这是我的代码。当我尝试运行此行时出现编译器错误:throw new MojException("Bledne dane");。错误是: exception MojE
我刚刚开始学习asp.net。在你们的支持下,我希望我能从这个论坛学到更多东西。 我的问题是, 我在 asp.net 页面中有一个 TabContainer1,因为每个选项卡面板中有多个类似 (60)
我是一名优秀的程序员,十分优秀!