我来自MATLAB所以我发现R中的一些东西有点奇怪。我有两个数据框:data_target
和times
。我有一个布尔数组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
中的相应行:
{}
有什么建议吗?
答案 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]