Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何从另一个向量中获取包含具有相应值的字符的矩阵的行和_R_Matrix - Fatal编程技术网

R 如何从另一个向量中获取包含具有相应值的字符的矩阵的行和

R 如何从另一个向量中获取包含具有相应值的字符的矩阵的行和,r,matrix,R,Matrix,嗨,我从我的数据中提取了此列: x <- data.frame(Category=factor(c("xxyyxyxyx", "xxyyyyxyx", "xxyyxyxyy", "yxyyxyxyx", "xxyyxyyyx"))) > x Category 1 xxyyxyxyx 2 xxyyyyxyx 3 xxyyxyxyy 4 yxyyxyxyx 5 xxyyxyyyx 我想根据矩阵xx在矩阵x中添加一列,包含每行的总和,即 x Categ

嗨,我从我的数据中提取了此列:

x <- data.frame(Category=factor(c("xxyyxyxyx", "xxyyyyxyx", "xxyyxyxyy",
           "yxyyxyxyx", "xxyyxyyyx")))
> x
  Category
1 xxyyxyxyx
2 xxyyyyxyx
3 xxyyxyxyy
4 yxyyxyxyx
5 xxyyxyyyx 
我想根据矩阵
xx
在矩阵
x
中添加一列,包含每行的总和,即

x

   Category    RowSum
 1 xxyyxyxyx     12
 2 xxyyyyxyx     14
 3 xxyyxyxyy     10
 4 yxyyxyxyx     11
 5 xxyyxyyyx     17

非常感谢

我们可以使用键/值索引替换'xx'中的值,并获得
行和

x$RowSum <- rowSums(`dim<-`(matval[xx], dim(xx)))
1)
matval[xx]
将给出各个值,然后这些值可以重新形成矩阵并求和:

transform(x, RowSum = rowSums(array(matval[xx], dim(xx))))
给予:

   Category RowSum
1 xxyyxyxyx     12
2 xxyyyyxyx     14
3 xxyyxyxyy     10
4 yxyyxyxyx     11
5 xxyyxyyyx     17
2)不首先计算
xx
而直接从
x
计算结果的替代方法如下。它提取每三个字符,并将
matval[…]
应用于每个这样的提取,然后对得到的矩阵求和

library(gsubfn)

transform(x, RowSums = 
   colSums(strapply(paste(Category), "...", s ~ matval[s], simplify = TRUE)))
注意:另一种计算
xx
的方法是在每三个字符后插入一个空格,将其读入数据帧并将其转换为矩阵

as.matrix(read.table(text = gsub("(...)", "\\1 ", x$Category)))
或者使用
read.fwf
根据3个固定宽度字段(每个字段有3个字符)读取:

as.matrix(read.fwf(textConnection(paste(x$Category)), rep(3, 3)))
或使用
子字符串

from <- seq(1, 9, 3)
to <- from + 3 - 1
t(sapply(x$Category, substring, from, to))

非常整洁。我刚想建议大家用
match
来装模作样。谢谢你的解决方案!如果
matval
是一个数据帧,即matval=data.frame(cate=c(“xxy”,“yxy”,“xyx”,“xyy”),val=c(3,2,7,5,12,4)),可以得到相同的结果吗?如果是,您能告诉我具体方法吗?@sdhaoui尝试创建一个命名向量
matval1
as.matrix(read.table(text = gsub("(...)", "\\1 ", x$Category)))
as.matrix(read.fwf(textConnection(paste(x$Category)), rep(3, 3)))
from <- seq(1, 9, 3)
to <- from + 3 - 1
t(sapply(x$Category, substring, from, to))