Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.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/9/three.js/2.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,我用我的原始数据发布了一个问题,但太多了,所以我要尝试一种更简单的方法 我有一个矩阵[80190]。我的一行是赢/输。我想把我的矩阵分为两个矩阵,一个是赢家,一个是输家 我的数据看起来像这样 a <- c(1, 2, 3, 4, 5) b <- c("W", "L", "W", "W", "L") c <- c(2, 3, 4, 5, 6) newmat <- rbind(a, b, c) 返回这个错误 x[subset&!is.na(subset),vars,drop

我用我的原始数据发布了一个问题,但太多了,所以我要尝试一种更简单的方法

我有一个矩阵[80190]。我的一行是赢/输。我想把我的矩阵分为两个矩阵,一个是赢家,一个是输家

我的数据看起来像这样

a <- c(1, 2, 3, 4, 5)
b <- c("W", "L", "W", "W", "L")
c <- c(2, 3, 4, 5, 6)
newmat <- rbind(a, b, c)
返回这个错误

x[subset&!is.na(subset),vars,drop=drop]中出现错误。
:(下标)逻辑下标太长


您可以尝试以下方法:

winMatrix <- newmat[, which(newmat['b', ] == 'W')]
lossMatrix <- newmat[, which(newmat['b', ] == 'L')]
winMatrix试试这个:

 newmat <- t(newmat)
 lapply(split(data.frame(newmat), newmat[,"b"]), t)
$L
  2   5  
a "2" "5"
b "L" "L"
c "3" "6"

$W
  1   3   4  
a "1" "3" "4"
b "W" "W" "W"
c "2" "4" "5"

newmat谢谢!这正是我想要的。知道which()命令很好。如果你喜欢这个解决方案并且认为它是正确的,那么就投票并接受答案。如果
“W”
“L”
是唯一的值,那么效率更高的应该是
idx@user3949008-这一切都安排得很奇怪。在R中,通常将数据存储在列而不是行中,并将不同类型的数据(字符串、数字)存储在
data.frame
s中。而
split
将是理想的解决方案-如果您有30种不同的类型,而不是
“W”
“L”
,会怎么样
split
可以很快地将其分类,否则需要30行。@thelatemail:undery。我将使用问题中的原始数据格式,并给出两个矩阵(赢和输)。我会自己使用数据帧,甚至不会真正拆分为多个数据帧,而是使用动态子集来计算每个类别所需的数据。这似乎更适合存储为
数据。frame
——您会注意到,只要使用
rbind
,就会看到
数值
行(
a
c
)被转换为
字符
 newmat <- t(newmat)
 lapply(split(data.frame(newmat), newmat[,"b"]), t)
$L
  2   5  
a "2" "5"
b "L" "L"
c "3" "6"

$W
  1   3   4  
a "1" "3" "4"
b "W" "W" "W"
c "2" "4" "5"