如何在r中仅按[]选择子集?

如何在r中仅按[]选择子集?,r,R,但它不起作用,有什么问题吗?我们创建一个列名称的数字索引,该索引以“q”开头,后跟数字('nm1'),使用该索引将“a”中的列子集,并将该子集中不等于1的值赋给0 a[grep("q\\d",colnames(a),perl=TRUE)!=1,grep("q\\d",colnames(a),perl=TRUE)]<-0 数据 a以防万一,如果你知道列名,你可以用它们来编制索引 a <- data.frame(q1=rep(c(1,'A','B'),4),q2=c(1,'A','B'

但它不起作用,有什么问题吗?

我们创建一个列名称的数字索引,该索引以“q”开头,后跟数字('nm1'),使用该索引将“a”中的列子集,并将该子集中不等于1的值赋给0

a[grep("q\\d",colnames(a),perl=TRUE)!=1,grep("q\\d",colnames(a),perl=TRUE)]<-0
数据
a以防万一,如果你知道列名,你可以用它们来编制索引

a <- data.frame(q1=rep(c(1,'A','B'),4),q2=c(1,'A','B','C'),
                 w1=c(1,'A','B','C'), stringsAsFactors=FALSE)

a
数据。表
方法:

a<-data.frame(q1=rep(c(1,'A','B'),4), q2=c(1,'A','B','C'),
   w1=c(1,'A','B','C'), stringsAsFactors=FALSE)

col_n <- c("q1", "q2")
a[, col_n][a[, col_n]!=1]<-0

> a
   q1 q2 w1
1   1  1  1
2   0  0  A
3   0  0  B
4   1  0  C
5   0  1  1
6   0  0  A
7   1  0  B
8   0  0  C
9   0  1  1
10  1  0  A
11  0  0  B
12  0  0  C
a
q1 q2 w1
1:  1  1  1
2:0 A
3:00B
4:10摄氏度
5:  0  1  1
6:0 A
7:10 B
8:0摄氏度
9:  0  1  1
上午10:10
11:00 B
12:0摄氏度

谢谢您的回复!我从未见过像
a[nm1][a[nm1]!=1]@jackson883这样的df[column][row]。
a[nm1]
正在对列进行子集设置。当我们不指定行,默认情况下,它将列子集化时,我们将处理子集数据,将其转换为逻辑矩阵(
a[nm1]!=1
),并使用与a[nm1]中的值对应的真值将其赋值为0。我知道,如果我有更多条件,我可以编写一个[nm1][a[nm1]!=1][a[nm1]>3]@jackson883您显示的可能是
a[nm1][a[nm1]!=1&a[nm1]>3],我想用条件
w1==1
q1
列进行子集。我的脚本:
tt
a[nm1] <- lapply(a[nm1], function(x) replace(x, x!=1, 0))
a <- data.frame(q1=rep(c(1,'A','B'),4),q2=c(1,'A','B','C'),
                 w1=c(1,'A','B','C'), stringsAsFactors=FALSE)
a<-data.frame(q1=rep(c(1,'A','B'),4), q2=c(1,'A','B','C'),
   w1=c(1,'A','B','C'), stringsAsFactors=FALSE)

col_n <- c("q1", "q2")
a[, col_n][a[, col_n]!=1]<-0

> a
   q1 q2 w1
1   1  1  1
2   0  0  A
3   0  0  B
4   1  0  C
5   0  1  1
6   0  0  A
7   1  0  B
8   0  0  C
9   0  1  1
10  1  0  A
11  0  0  B
12  0  0  C
a<-data.table(q1=rep(c(1,'A','B'),4),q2=c(1,'A','B','C'),w1=c(1,'A','B','C'))

a[,grep("^q", colnames(a), value = T):=lapply(a[,grep("^q", colnames(a), value = T), with = F], function(x) ifelse(x == 1, 1, 0))]

> a
    q1 q2 w1
 1:  1  1  1
 2:  0  0  A
 3:  0  0  B
 4:  1  0  C
 5:  0  1  1
 6:  0  0  A
 7:  1  0  B
 8:  0  0  C
 9:  0  1  1
10:  1  0  A
11:  0  0  B
12:  0  0  C