Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R将data.frame的一列更改为二进制向量_R_Binary_Dataframe - Fatal编程技术网

R将data.frame的一列更改为二进制向量

R将data.frame的一列更改为二进制向量,r,binary,dataframe,R,Binary,Dataframe,我已将此文件读入R中的data.frame,如您所见,第5列包含一些用“;”分隔的值。是否可以将此data.frame转换为更大的data.frame并将第5列扩展为二进制向量 > head(uinfo) V1 V2 V3 V4 V5 1 100044 1899 1 5 831;55;198;8;450;7;39;5;111 2 100054 1987 2 6

我已将此文件读入R中的data.frame,如您所见,第5列包含一些用“;”分隔的值。是否可以将此data.frame转换为更大的data.frame并将第5列扩展为二进制向量

> head(uinfo)
      V1   V2 V3  V4                             V5
1 100044 1899  1   5    831;55;198;8;450;7;39;5;111
2 100054 1987  2   6                              0
3 100065 1989  1  57                              0
4 100080 1986  1  31 113;41;44;48;91;96;42;79;92;35
5 100086 1986  1 129                              0
6 100097 1981  1  75                              0
因此,作为一个简单的示例,如果我的前两行是:

1 100044 1899  1   5    1;2;4;7
2 100054 1987  2   6    3;8
我想得到:

1 100044 1899  1   5    1 1 0 1 0 0 1 0 0 0
2 100054 1987  2   6    0 0 1 0 0 0 0 1 0 0
我是否必须使用另一个程序(如python)来预处理数据,或者是否可以通过一些apply函数来进行预处理


谢谢

您可以尝试我的“splitstackshape”软件包中的
concat.split.expanded
功能:

添加
drop=TRUE
以删除原始列


此处,“mydf”的定义如下:

mydf <- structure(list(V1 = c(100044L, 100054L), V2 = c(1899L, 1987L), 
    V3 = 1:2, V4 = 5:6, V5 = c("1;2;4;7", "3;8")), .Names = c("V1", 
"V2", "V3", "V4", "V5"), class = "data.frame", row.names = c(NA, -2L))

mydf您可以从我的“splitstackshape”软件包中尝试
concat.split.expanded
功能:

添加
drop=TRUE
以删除原始列


此处,“mydf”的定义如下:

mydf <- structure(list(V1 = c(100044L, 100054L), V2 = c(1899L, 1987L), 
    V3 = 1:2, V4 = 5:6, V5 = c("1;2;4;7", "3;8")), .Names = c("V1", 
"V2", "V3", "V4", "V5"), class = "data.frame", row.names = c(NA, -2L))

mydf这里的想法是有两个要求:

  • 将数据拆分为分号`
  • 创建列,用零/假填充空列
  • #1很简单:使用strsplit

    #2可以通过按照新列的数量排序,并检查它们是否在新飞溅的字符串中来完成

      library(data.table)
    
      largest <- 1e3  # (Whatever your largest expected value)
      newColNames <- as.character(seq(largest))
      dat[,  (newColNames) := as.data.table(t(sapply(strsplit(V5, ";"), "%in%", x=seq(largest))))]
    
      # if you really want numeric (as opposed to logical)
      dat[, (newColNames) := lapply(.SD, as.numeric), .SDcols=newColNames]
    
    库(data.table)
    
    最大这里的想法是有两个要求:

  • 将数据拆分为分号`
  • 创建列,用零/假填充空列
  • #1很简单:使用strsplit

    #2可以通过按照新列的数量排序,并检查它们是否在新飞溅的字符串中来完成

      library(data.table)
    
      largest <- 1e3  # (Whatever your largest expected value)
      newColNames <- as.character(seq(largest))
      dat[,  (newColNames) := as.data.table(t(sapply(strsplit(V5, ";"), "%in%", x=seq(largest))))]
    
      # if you really want numeric (as opposed to logical)
      dat[, (newColNames) := lapply(.SD, as.numeric), .SDcols=newColNames]
    
    库(data.table)
    最大使用基函数(我认为步骤太多)

    >df pos x cbind(df,t(位置,功能(y)替换(x,y,1)))
    V1 V2 V3 V4 V5 1 2 3 4 5 6 7 8
    1 100044 1899  1  5 1;2.4.7 1 1 0 1 0 0 1 0
    2 100054 1987  2  6     3;8 0 0 1 0 0 0 0 1
    
    使用基本函数(我认为步骤太多)

    >df pos x cbind(df,t(位置,功能(y)替换(x,y,1)))
    V1 V2 V3 V4 V5 1 2 3 4 5 6 7 8
    1 100044 1899  1  5 1;2.4.7 1 1 0 1 0 0 1 0
    2 100054 1987  2  6     3;8 0 0 1 0 0 0 0 1
    
    Hello,一个可复制的示例(即,可以剪切+粘贴的内容)会很有帮助。您可以使用
    复制()
    。看一下说明书您好,一个可复制的例子(即,可以剪切+粘贴的东西)会很有帮助。您可以使用
    复制()
    。看看说明书+1非常好!我不熟悉
    splitstackshape
    @RicardoSaporta,谢谢。这是一个正在进行的工作。我现在正在检查它,非常酷+1非常好!我不熟悉
    splitstackshape
    @RicardoSaporta,谢谢。这是一项正在进行的工作。我现在正在检查,非常酷