2015-02-26 22 views
5

Tôi có một khung dữ liệu của cấu trúc này mà tôi muốn cư:hàng có điều kiện điền của một khung dữ liệu

V1  V2 V3 V4 V5 V6 V7 V8 
1 ID_CODE 0 0 0 0 0 0 0 
2 THIS 0 0 0 0 0 0 0 
3 ISAROW 0 0 0 0 0 0 0 
4 01  0 0 0 0 0 0 0 
5 02  0 0 0 0 0 0 0 
6 03  0 0 0 0 0 0 0 
7 ID_CODE 0 0 0 0 0 0 0 
8 THESE 0 0 0 0 0 0 0 
9 ARE  0 0 0 0 0 0 0 
10 MORE 0 0 0 0 0 0 0 
11 ROWS 0 0 0 0 0 0 0 
12 01  0 0 0 0 0 0 0 
13 02  0 0 0 0 0 0 0 
14 03  0 0 0 0 0 0 0 
15 ROW  0 0 0 0 0 0 0 

Và khung dữ liệu này với các con số để cư nó:

V2_1 V2_2 V2_3 V2_4 V2_5 V2_6 V2_7 
1 786 786 786 786 786 786 786 
2 786 786 786 786 786 786 786 
3 78 78 78 78 78 78 78 
4 78 78 78 78 78 78 78 
5 78 78 78 78 78 78 78 
6 78 78 78 78 78 78 78 

Những con số này phải đi vào cột V2: V8 và chỉ ở các hàng trong đó V1 là một số. Các hàng trong đó V1 là một chuỗi được giữ nguyên như số 0.

Trả lời

4

Nếu df1 là bản gốc và df2 việc thay thế, sau đó chúng tôi có thể sử dụng Map để thay thế tập hợp con.

## find the rows with only digits in the first column 
rows <- grepl("^\\d+$", df1$V1) 
## replace the subset with 'df2' 
df1[rows, -1] <- Map("[<-", df1[rows, -1], df2) 
df1 
#   V1 V2 V3 V4 V5 V6 V7 V8 
# 1 ID_CODE 0 0 0 0 0 0 0 
# 2  THIS 0 0 0 0 0 0 0 
# 3 ISAROW 0 0 0 0 0 0 0 
# 4  01 786 786 786 786 786 786 786 
# 5  02 786 786 786 786 786 786 786 
# 6  03 78 78 78 78 78 78 78 
# 7 ID_CODE 0 0 0 0 0 0 0 
# 8 THESE 0 0 0 0 0 0 0 
# 9  ARE 0 0 0 0 0 0 0 
# 10 MORE 0 0 0 0 0 0 0 
# 11 ROWS 0 0 0 0 0 0 0 
# 12  01 78 78 78 78 78 78 78 
# 13  02 78 78 78 78 78 78 78 
# 14  03 78 78 78 78 78 78 78 
# 15  ROW 0 0 0 0 0 0 0 

Hoặc, một cách khác sẽ được sử dụng replace()

df1[rows, -1] <- Map(function(x, y) replace(x, rows, y), df1[-1], df2) 
+0

Thật hoàn hảo, hãy yêu công việc của bạn. Cảm ơn! – efbbrown

4

Chúng ta có thể tạo ra một chỉ số dựa trên sự hiện diện của con số trong cột "V1" của "df1", sử dụng danh mục đó để tập hợp con " df1 ", nhân với" df2 "sau khi thêm" 1 "(giả sử kích thước sẽ giống nhau)

indx <- grep("^\\d+$", df1$V1) 
df1[indx,-1] <- df1[indx,-1]+1 *df2 
df1 
#  V1 V2 V3 V4 V5 V6 V7 V8 
#1 ID_CODE 0 0 0 0 0 0 0 
#2  THIS 0 0 0 0 0 0 0 
#3 ISAROW 0 0 0 0 0 0 0 
#4  01 786 786 786 786 786 786 786 
#5  02 786 786 786 786 786 786 786 
#6  03 78 78 78 78 78 78 78 
#7 ID_CODE 0 0 0 0 0 0 0 
#8 THESE 0 0 0 0 0 0 0 
#9  ARE 0 0 0 0 0 0 0 
#10 MORE 0 0 0 0 0 0 0 
#11 ROWS 0 0 0 0 0 0 0 
#12  01 78 78 78 78 78 78 78 
#13  02 78 78 78 78 78 78 78 
#14  03 78 78 78 78 78 78 78 
#15  ROW 0 0 0 0 0 0 0 
Các vấn đề liên quan