我是R的新手,我在Python中一直做的命令遇到了麻烦。
我有两个数据框(数据库和creditID),我想要做的是比较数据库中的一列和creditID中的一列。更具体地说,creditIDs[,1]
中存在一个值但database[,5]
中没有,我想删除database
中的整行。
这是代码:
for (i in 1:lengthColumns){
if (!(database$credit_id[i] %in% creditosVencidos)){
database[i,]<-database[-i,]
}
}
但我继续犯这个错误:
50: In `[<-.data.frame`(`*tmp*`, i, , value = structure(list( ... :
replacement element 50 has 9696 rows to replace 1 rows
有人可以解释为什么会这样吗?谢谢!
答案 0 :(得分:0)
which()命令将返回满足布尔语句的行索引,就像python中的numpy.where()一样。在带有列名的数据框后使用$可以得到该列的向量...或者你可以做d [,column_number]。
在这个例子中,我创建了一个x和y列,它共享前五个值,并使用which()来分割数据帧的行数相等:
L3 <- LETTERS[1:3]
fac <- sample(L3, 10, replace = TRUE)
(d <- data.frame(x = rep(1:5, 2), y = 1:10, fac = fac))
d = d[which(d$x == d$y),]
d
x y fac
1 1 A
2 2 B
3 3 C
4 4 B
5 5 B
答案 1 :(得分:0)
您需要针对列名称/数字进行调整。
# Create two example data.frames
creditID <- data.frame(ID = c("896-19", "895-8", "899-1", "899-5"))
database <- data.frame(ID = c("896-19", "camel", "899-1", "goat", "899-1"))
# Method 1
database[database$ID %in% creditID$ID, ]
# Method 2 (subset() function)
database <- subset(database, ID %in% creditID$ID)