这是我的数据框。当满足两个条件时,如何才能在数据框中提取列名称?
Name Column_1 Column_2 Column_3 Column_4
A 4 1 0 1
B 5 0 0 1
C 2 0 1 0
D 1 0 1 1
我想提取的列名时,有一个1只在一排,其中column_1 <=2
。
在这个例子中,唯一可以工作的列是column_3
。
这是我的数据框。当满足两个条件时,如何才能在数据框中提取列名称?
Name Column_1 Column_2 Column_3 Column_4
A 4 1 0 1
B 5 0 0 1
C 2 0 1 0
D 1 0 1 1
我想提取的列名时,有一个1只在一排,其中column_1 <=2
。
在这个例子中,唯一可以工作的列是column_3
。
我有2个理论什么被问到理论1:如果我们假设只有1和0将在偶数列,那么也许:
colSums(dat[ dat$Column_1 >=2, reduce the dataframe to only qualifying rows
-1 ]) == 1 # remove letter column and make test.
#-------
Column_1 Column_2 Column_3 Column_4
FALSE TRUE TRUE FALSE
你可以用它来从names(dat)[-1]
dput(dat)
structure(list(Name = structure(1:4, .Label = c("A", "B", "C",
"D"), class = "factor"), Column_1 = c(4L, 5L, 2L, 1L), Column_2 = c(1L,
0L, 0L, 0L), Column_3 = c(0L, 0L, 1L, 1L), Column_4 = c(1L, 1L,
0L, 1L)), .Names = c("Name", "Column_1", "Column_2", "Column_3",
"Column_4"), class = "data.frame", row.names = c(NA, -4L))
理论2:(也得到不同的答案比你说的是正确的
sdat <- dat[ dat$Column_1 >=2,
-1 ]
sdat[ rowSums(sdat[-1]) == 1, ]
#-------
Column_1 Column_2 Column_3 Column_4
2 5 0 0 1
3 2 0 1 0
> names(sdat)[colSums(sdat[ rowSums(sdat[-1]) == 1, ]) == 1]
[1] "Column_3" "Column_4"
首先提问时表示COLUMN_1需要的是> =,现在它读取< = 2,所以使用了代号为第二个理论后,简单地颠倒用于行选择的不平等。当我这样做,我现在得到的只是“Column_3
sdat <- dat[ dat$Column_1 <= 2,
-1 ]
sdat[ rowSums(sdat[-1]) == 1, ]
names(sdat)[colSums(sdat[ rowSums(sdat[-1]) == 1, ]) == 1]
#[1] "Column_3"
我要的是拉出列名时,有在列1,只有当'Column_1'小于2。所以,如果一个列有1时'Column_1'大于2则自动取消资格。 – KatherineD
首先你说Column_1需要是> =,现在<= 2。所以你应该能够使用第二个理论的代码,在简单地逆向行选择的不平等之后。当我这样做时,我确实只会得到“Column_3”。 –
也许你想要的东西是这样的:
a <- ...
w <- apply(a[,-1], 2, FUN= function(x) {all(x[a$Column_1 > 2] == 0) & any(x == 1)})
结果是:
Column_1 Column_2 Column_3 Column_4
FALSE FALSE TRUE FALSE
我们应用该功能到a
的所有列(第一列除外),并检查列始终为0
时Column1 > 2
,但是至少有一个1
。
列姓名(或名称),然后是
n <- names(a)[which(w)+1]
随着data.table
:
library(data.table)
dt <- fread('Name Column_1 Column_2 Column_3 Column_4
A 4 1 0 1
B 5 0 0 1
C 2 0 1 0
D 1 0 1 1')
melt(dt[Column_1<=2 & Column_2+Column_3+Column_4==1], id = "Name")[value==1, .(variable)]
variable
1: Column_3
我不明白你的病情:何不也Column_4(对于行2) – HubertL
因为还有1时'Column_1'大于2。所以,我只是想拉出来的东西,有1只在'Column_1'等于或大于2 – KatherineD
我觉得有一个错字无论是在你的问题或你的措辞 - 你的意思可能是'<=', not '> = ' – natario