【问题标题】:"which" function inside a custom function to find a column number basis some condition自定义函数中的“哪个”函数根据某些条件查找列号
【发布时间】:2019-02-11 14:54:17
【问题描述】:

我正在准备一个函数来定位一个数据中的列号,引用来自其他数据集的名称

我有 2 个数据集 test 1 和 test2,我正在准备一个函数来从另一个数据集 test 2(列号)中的 test1 中查找列名。

输入(测试1)

structure(list(mastercode_02 = c(3036696L, 3036696L, 3036696L, 
3036696L, 3036696L, 3036696L), mastercode_03 = c(3039617L, 3039617L, 
3039617L, 3039617L, 3039617L, 3039617L), mastercode_04 = c(3000470L, 
3000470L, 3000470L, 3000470L, 3000470L, 3000470L), mastercode_05 = c(3039123L, 
3039123L, 3039123L, 3039123L, 3039123L, 3039123L), mastercode_06 = c(1000054L, 
1000054L, 1000054L, 1000054L, 1000054L, 1000054L), mastercode_07 = 1000001:1000006, 
    mastercode_08 = c(NA_integer_, NA_integer_, NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_), mastercode_09 = c(NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
    ), mastercode_10 = c(NA_integer_, NA_integer_, NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_), mastercode_11 = c(NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
    ), mastercode_12 = c(NA_integer_, NA_integer_, NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_)), class = c("data.table", 
"data.frame"), row.names = c(NA, -6L), .internal.selfref = <pointer: 0x07fb2498>)

第二个数据

控制台~/

输入(测试2)

structure(list(QID_121 = c(NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_, NA_integer_), QID_131 = c(NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
), unitlevel = c(6, 6, 6, 6, 6, 6), mastercode_01 = c(NA, NA, 
NA, NA, NA, NA), mastercode_02 = c(3036696L, 3036696L, 3036696L, 
3036696L, 3036696L, 3036696L), mastercode_03 = c(3039617L, 3039617L, 
3039617L, 3039617L, 3039617L, 3039617L), mastercode_04 = c(3000470L, 
3000470L, 3000470L, 3000470L, 3000470L, 3000470L), mastercode_05 = c(3039123L, 
3039123L, 3039123L, 3039123L, 3039123L, 3039123L), mastercode_06 = c(1000054L, 
1000054L, 1000054L, 1000054L, 1000054L, 1000054L), mastercode_07 = 1000001:1000006, 
    mastercode_08 = c(NA_integer_, NA_integer_, NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_), mastercode_09 = c(NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
    ), mastercode_10 = c(NA_integer_, NA_integer_, NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_), mastercode_11 = c(NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
    ), mastercode_12 = c(NA_integer_, NA_integer_, NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_)), class = c("data.table", 
"data.frame"), row.names = c(NA, -6L), .internal.selfref = <pointer: 0x07fb2498>)

我想要下面的东西,可以在其他函数中使用:

levelfun<-function(m,dataset){

levelname<-names(mastercodes)[[m]]

level_filter_data<-dataset%>% filter(unitlevel>m)

k=which(names(level_filter_data)==levelname)}

最后一行出现错误,可能是我应该使用替代哪个函数。

【问题讨论】:

  • 。函数内部的mastercodes 是什么?另外,dataset 不是函数的参数
  • 如果你想找到一个索引基不列名,使用matchmatch(names(test1), names(test2))

标签: r custom-function


【解决方案1】:

您的目标有点不清楚,但使用您的示例创建 test1 和 test2 数据框:

test1<-structure(list(mastercode_02 = c(3036696L, 3036696L, 3036696L, 
                                 3036696L, 3036696L, 3036696L), mastercode_03 = c(3039617L, 3039617L, 
                                                                                  3039617L, 3039617L, 3039617L, 3039617L), mastercode_04 = c(3000470L, 
                                                                                                                                             3000470L, 3000470L, 3000470L, 3000470L, 3000470L), mastercode_05 = c(3039123L, 
                                                                                                                                                                                                                  3039123L, 3039123L, 3039123L, 3039123L, 3039123L), mastercode_06 = c(1000054L, 
                                                                                                                                                                                                                                                                                       1000054L, 1000054L, 1000054L, 1000054L, 1000054L), mastercode_07 = 1000001:1000006, 
               mastercode_08 = c(NA_integer_, NA_integer_, NA_integer_, 
                                 NA_integer_, NA_integer_, NA_integer_), mastercode_09 = c(NA_integer_, 
                                                                                           NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
                                 ), mastercode_10 = c(NA_integer_, NA_integer_, NA_integer_, 
                                                      NA_integer_, NA_integer_, NA_integer_), mastercode_11 = c(NA_integer_, 
                                                                                                                NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
                                                      ), mastercode_12 = c(NA_integer_, NA_integer_, NA_integer_, 
                                                                           NA_integer_, NA_integer_, NA_integer_)), class = c("data.table", 
                                                                                                                              "data.frame"), row.names = c(NA, -6L))

test2<-structure(list(QID_121 = c(NA_integer_, NA_integer_, NA_integer_, 
                              NA_integer_, NA_integer_, NA_integer_), QID_131 = c(NA_integer_, 
                                                                                  NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
                              ), unitlevel = c(6, 6, 6, 6, 6, 6), mastercode_01 = c(NA, NA, 
                                                                                    NA, NA, NA, NA), mastercode_02 = c(3036696L, 3036696L, 3036696L, 
                                                                                                                       3036696L, 3036696L, 3036696L), mastercode_03 = c(3039617L, 3039617L, 
                                                                                                                                                                        3039617L, 3039617L, 3039617L, 3039617L), mastercode_04 = c(3000470L, 
                                                                                                                                                                                                                                   3000470L, 3000470L, 3000470L, 3000470L, 3000470L), mastercode_05 = c(3039123L, 
                                                                                                                                                                                                                                                                                                        3039123L, 3039123L, 3039123L, 3039123L, 3039123L), mastercode_06 = c(1000054L, 
                                                                                                                                                                                                                                                                                                                                                                             1000054L, 1000054L, 1000054L, 1000054L, 1000054L), mastercode_07 = 1000001:1000006, 
                  mastercode_08 = c(NA_integer_, NA_integer_, NA_integer_, 
                                    NA_integer_, NA_integer_, NA_integer_), mastercode_09 = c(NA_integer_, 
                                                                                              NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
                                    ), mastercode_10 = c(NA_integer_, NA_integer_, NA_integer_, 
                                                         NA_integer_, NA_integer_, NA_integer_), mastercode_11 = c(NA_integer_, 
                                                                                                                   NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
                                                         ), mastercode_12 = c(NA_integer_, NA_integer_, NA_integer_, 
                                                                              NA_integer_, NA_integer_, NA_integer_)), class = c("data.table", 
                                                                                                                                 "data.frame"), row.names = c(NA, -6L))

以下调用将分别表示: test1中存在test2的哪些列名 test1中存在test2的列名的向量索引号 列名存在于test1中的test2的数据框子集

names(test2) %in% names(test1)
which(names(test2) %in% names(test1))
test2[,names(test2) %in% names(test1)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多