我已经看到了将一个矩阵与另一个矩阵相乘的答案。但我有一个单一的矩阵,完全数字。 举个例子:
matrix = read.table(text =
"ID Mult t1 t2 t3 t4 t5
4 0.164 10 20 30 40 50
16 0.581 5 10 5 10 5
42 0.008 16 17 18 19 20
91 0.328 20 20 20 20 20
103 0.108 103 42 56 84 61",
h = T)
我希望将t1
乘以t5
乘以乘数,然后将结果放入矩阵的新列中。
我会逐列地进行,但事实上我有超过200列!
希望有人能提出更简单的解决方法。
答案 0 :(得分:1)
你可以这样做:
df=read.table(text="ID Mult t1 t2 t3 t4 t5
4 0.164 10 20 30 40 50
16 0.581 5 10 5 10 5
42 0.008 16 17 18 19 20
91 0.328 20 20 20 20 20
103 0.108 103 42 56 84 61",h=T)
df[,c(paste0(colnames(df[,grepl("^t.*",colnames(df),perl = T)]),"bis"))]=df[,grepl("^t.*",colnames(df),perl = T)]*df$Mult
df[,grepl("^t.*",colnames(df),perl = T)]
子集df
仅包含以“t”开头的列
df[,c(paste0(colnames(df[,grepl("^t.*",colnames(df),perl = T)]),"bis"))]
获取前一个子集的colnames()
,并使用paste0()
和“bis”或任何字符串将它们连接起来以指示更改。这将创建填充乘法结果的新列。
> df
ID Mult t1 t2 t3 t4 t5 t1bis t2bis t3bis t4bis t5bis
1 4 0.164 10 20 30 40 50 1.640 3.280 4.920 6.560 8.200
2 16 0.581 5 10 5 10 5 2.905 5.810 2.905 5.810 2.905
3 42 0.008 16 17 18 19 20 0.128 0.136 0.144 0.152 0.160
4 91 0.328 20 20 20 20 20 6.560 6.560 6.560 6.560 6.560
5 103 0.108 103 42 56 84 61 11.124 4.536 6.048 9.072 6.588
答案 1 :(得分:0)
有些人不喜欢循环,但我有时会这样做。这是其中一次:)
mydf<-matrix
for (i in 3:length(mydf)){
mydf[,length(mydf)+1] <- mydf$Mult * mydf[i]
}
mydf
ID Mult t1 t2 t3 t4 t5 t1.1 t2.1 t3.1 t4.1 t5.1
1 4 0.164 10 20 30 40 50 1.640 3.280 4.920 6.560 8.200
2 16 0.581 5 10 5 10 5 2.905 5.810 2.905 5.810 2.905
3 42 0.008 16 17 18 19 20 0.128 0.136 0.144 0.152 0.160
4 91 0.328 20 20 20 20 20 6.560 6.560 6.560 6.560 6.560
5 103 0.108 103 42 56 84 61 11.124 4.536 6.048 9.072 6.588