我有一个像这样的数据框c
c
Freq CTM
000110100111 2 NA
110110100111 1 32.58847
111001011000 2 NA
111111111111 1 25.61041
和像这样的数据框nona_c
nona_c
Freq CTM
000110100111 2 37.0642
111001011000 2 37.0642
我想将CTM
c
列中的NA替换为nona_c
的CTM值。 nona_c
(二进制字符串)的rownames将始终存在于c
中。
输出应为
mergedC
Freq CTM
000110100111 2 37.0642
110110100111 1 32.58847
111001011000 2 37.0642
111111111111 1 25.61041
我一直在尝试merge
但没有成功。
mergedC <- merge(x = c, y = nona_c, by = 0, #rownames
all.y = TRUE)
答案 0 :(得分:4)
match
操作可能会使这更直接:
c$CTM[is.na(c$CTM)] <- nona_c$CTM[match(rownames(c)[is.na(c$CTM)], rownames(nona_c))]
# Freq CTM id
#000110100111 2 37.06420 000110100111
#110110100111 1 32.58847 110110100111
#111001011000 2 37.06420 111001011000
#111111111111 1 25.61041 111111111111
答案 1 :(得分:2)
我们可以使用data.table
使用感兴趣的变量on
来执行此操作。这里我们加入行名列。 &#34; i.CTM&#34;的值被分配(:=
)到&#39; CTM&#39;。
library(data.table)
setDT(c, keep.rownames=TRUE)[]
setDT(nona_c, keep.rownames=TRUE)[]
c[nona_c, CTM := i.CTM , on = "rn"]
c
# rn Freq CTM
#1: 000110100111 2 37.06420
#2: 110110100111 1 32.58847
#3: 111001011000 2 37.06420
#4: 111111111111 1 25.61041
注意:row.names不会保留在data.table
或dplyr
中。因此,在转换&#39; data.frame&#39;要使用keep.rownames = TRUE
。
(function () {
'use strict';
angular
.module('scheduling')
.controller('ScheduleCtrl', ['$scope', '$rootScope', '$log', '$filter', function ($scope, $rootScope, $log, $filter) {
$scope.selectedDay = function () {
$rootScope.day = Object.keys($scope.day).map(key => $scope.day[key]);
$rootScope.day = $scope.day;
$rootScope.schedule.weekdays.day['@'].day = $rootScope.day;
console.log($rootScope.day);
}
}]);
})();
。