R中的矩阵子集
我用我的原始数据发布了一个问题,但太多了,所以我要尝试一种更简单的方法 我有一个矩阵[80190]。我的一行是赢/输。我想把我的矩阵分为两个矩阵,一个是赢家,一个是输家 我的数据看起来像这样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
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"