在R中一次设置多行值

时间:2018-04-11 20:47:18

标签: r dataframe indexing

我来自MATLAB所以我发现R中的一些东西有点奇怪。我有两个数据框:data_targettimes。我有一个布尔数组times == TRUE,我希望对应于索引的行的最后一列,其中data[times , (ncol(data) - ncol(data_target)+2):(ncol(data))] = data_target[k,-1]被另一行覆盖。基本上,我要做的是以下内容:

(ncol(data) - ncol(data_target)+2):(ncol(data))

为了更清楚一点,times == TRUE实际上等于4,所以我想将data_target[k,-1]中每个行号的最后4个值替换为repmat()中的4个值。在MATLAB中,我会使用data = col1 col2 col3 col4 col5 col6 col7 1 a b c d e f f 2 a b c d e f f 3 a b c d e f f 4 a b c d e f f 5 a b c d e f f 6 a b c d e f f data_target = tar1 tar2 tar3 tar4 tar5 1 0 0 0 0 0 2 1 1 1 1 1 3 2 2 2 2 2 4 3 3 3 3 3 5 4 4 4 4 4 ,一切都会成功,但在R中我不知道如何解决这个问题。

编辑:这是我正在尝试做的一个例子。假设我们有这两个数据框:

k=3

假设times = c(T,F,F,F,T,F)data_target。所以我希望data第3行的最后4个元素覆盖output = col1 col2 col3 col4 col5 col6 col7 1 a b c 2 2 2 2 2 a b c d e f f 3 a b c d e f f 4 a b c d e f f 5 a b c 2 2 2 2 6 a b c d e f f 中的相应行:

{}

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我相信你想要一个简单的单行?

data[times, (ncol(data)-4):(ncol(data))] <- data_target[k, (ncol(data_target)-4):(ncol(data_target))]

输出

  col1 col2 col3 col4 col5 col6 col7
1    a    b    2    2    2    2    2
2    a    b    c    d    e    f    f
3    a    b    c    d    e    f    f
4    a    b    2    2    2    2    2
5    a    b    c    d    e    f    f
6    a    b    2    2    2    2    2

如果你想让它更具可读性,你可以打破它

selected_cols = (data_ncols-4):ncol(data)
selected_targ_cols = (ncol(data_target)-4):ncol(data_target)
data[times, selected_cols] <- data_target[k, selected_targ_cols]