如何在r中仅按[]选择子集?
但它不起作用,有什么问题吗?我们创建一个列名称的数字索引,该索引以“q”开头,后跟数字('nm1'),使用该索引将“a”中的列子集,并将该子集中不等于1的值赋给0如何在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'
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