0

I'm a complete R novice, and I'm really struggling on this problem. I need to take a vector, evens, and subtract it from the first column of a matrix, top_secret. I tried to call up only that column using top_secret[,1] and subtract the vector from that, but then it only returns the column. Is there a way to do this inside the matrix so that I can continue to manipulate the matrix without creating a bunch of separate columns?

monte
  • 1,482
  • 1
  • 10
  • 26
  • 2
    Hi Hannah, it will be much easier to help if you provide at least a sample of your data with `dput(top_secret)` and `dput(evens)`. If your data really is *top secret* you can make up something that has a similar structure. Ideally, you would also provide your expected output. Please surround the output of `dput` with three backticks (```) for better formatting. See [How to make a reproducible example](https://stackoverflow.com/questions/5963269/) for more info. – Ian Campbell Jul 08 '20 at 17:54
  • Sorry about that. This is my first post here and I've never done any R work before. I tried to format my code in another comment but it didn't work. I'll try and figure this out for my next question. – Hannah Harder Jul 08 '20 at 18:30

2 Answers2

2

Sure, you can. Here is an example:

m <- matrix(c(1,2,3,4),4,4, byrow = TRUE)

> m
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    1    2    3    4
[3,]    1    2    3    4
[4,]    1    2    3    4

m[,4] <- m[,4] - c(5,5,5,5)

which gives:

> m
     [,1] [,2] [,3] [,4]
[1,]    1    2    3   -1
[2,]    1    2    3   -1
[3,]    1    2    3   -1
[4,]    1    2    3   -1
slava-kohut
  • 4,203
  • 1
  • 7
  • 24
  • That worked perfectly!! Thank you so much. Will this extend to being able to adjust individual rows and columns together? Like if I want to subtract a constant number from rows 18-24 in the 3rd column, then I would do something like this: ``` top_secret[18:24,3] <- top_secret[18:24, 3]-100] ``` ? – Hannah Harder Jul 08 '20 at 18:27
  • Yes, you can modify individual elements – slava-kohut Jul 08 '20 at 18:28
  • Hmm I tried to format my code but I guess I did it wrong. Sorry I'm really new to this. – Hannah Harder Jul 08 '20 at 18:28
  • this should work: `top_secret[18:24,3] <- top_secret[18:24, 3] - 100` or `m[1:2,1] <- m[1:2,1] - 100` in my example – slava-kohut Jul 08 '20 at 18:30
  • @HannahHarder No problem, I am here to help. Consider upvoting or accepting if you liked the answer. – slava-kohut Jul 08 '20 at 19:58
0

Or another option is replace

replace(m, cbind(seq_len(nrow(m)), 4), m[,4] - 5)

data

m <- matrix(c(1,2,3,4),4,4, byrow = TRUE)
akrun
  • 874,273
  • 37
  • 540
  • 662