如何使用R中的(列名称*单元格中的编号)填充数据框中的每个单元格?

如何使用R中的(列名称*单元格中的编号)填充数据框中的每个单元格?,r,function,dataframe,R,Function,Dataframe,下面是数据帧df 我需要用R中的(列名称*单元格中的编号)填充数据框中的每个单元格。 从第2列(比萨饼)开始,即df[1,2] 输入: Name pizza coke fries 1 Tom 1 NA NA 2 Dick NA 2 1 3 Harry 3 NA 1 4 Don NA 2 NA 5 John 2 NA 1 预期产出: Name pizza

下面是数据帧df

我需要用R中的(列名称*单元格中的编号)填充数据框中的每个单元格。 从第2列(比萨饼)开始,即df[1,2]

输入:

   Name  pizza coke fries
1   Tom     1   NA    NA
2  Dick    NA    2     1
3 Harry     3   NA     1
4   Don    NA    2    NA
5  John     2   NA     1
预期产出:

   Name     pizza                   coke           fries
1   Tom     pizza                   <NA>           <NA>
2  Dick     <NA>                    coke coke      fries
3 Harry     pizza pizza pizza       <NA>           fries
4   Don     <NA>                    coke coke      <NA>
5  John     pizza pizza             <NA>           fries
Name比萨可乐薯条
汤姆比萨饼
2份迪克可乐薯条
3份哈利披萨薯条
4吨可乐
5份约翰披萨薯条

我们可以基于“HCC”列中的非NA元素创建逻辑矩阵

nm1 <- names(df1)[startsWith(names(df1), 'HCC')]
i1 <- !is.na(df1[nm1])
df1[nm1][i1] <- nm1[col(df1[nm1])][i1]
df1
#  ID HCC_1 HCC_2 HCC_3
#1 P1 HCC_1  <NA>  <NA>
#2 P2  <NA> HCC_2 HCC_3
#3 P3 HCC_1  <NA> HCC_3
#4 P4  <NA> HCC_2  <NA>
#5 P5 HCC_1  <NA> HCC_3

nm1您希望从单元格中的
列名称*编号得到什么输出?什么是HCC_1*3
?那么HCC_2*NA呢?请提供预期输出。已编辑:添加了预期输出。有什么问题?@AMC我需要上面输入的输出。@helios9是的,但Stack Overflow是一个关于编程和软件开发的QA网站,不是免费的代码编写服务。明白了。非常感谢。它确实起作用了。我想知道你到底做了什么,非常感谢。那太好了。
nm2 <- names(df2)[-1]
i2 <- !is.na(df2[nm2])
df2[nm2][i2] <-  trimws(strrep(paste0(nm2[col(df2[nm2])][i2], " "), df2[nm2][i2]))
df2
#   Name             pizza      coke fries
#1   Tom             pizza      <NA>  <NA>
#2  Dick              <NA> coke coke fries
#3 Harry pizza pizza pizza      <NA> fries
#4   Don              <NA> coke coke  <NA>
#5  John       pizza pizza      <NA> fries
df1 <-  structure(list(ID = c("P1", "P2", "P3", "P4", "P5"), HCC_1 = c(1L, 
NA, 3L, NA, 6L), HCC_2 = c(NA, 2L, NA, 2L, NA), HCC_3 = c(NA, 
1L, 1L, NA, 1L)), class = "data.frame", row.names = c("1", "2", 
"3", "4", "5"))

df2 <- structure(list(Name = c("Tom", "Dick", "Harry", "Don", "John"
 ), pizza = c(1L, NA, 3L, NA, 2L), coke = c(NA, 2L, NA, 2L, NA
 ), fries = c(NA, 1L, 1L, NA, 1L)), class = "data.frame", row.names = c("1", 
 "2", "3", "4", "5"))