小编Jaa*_*aap的帖子

如何将字符串拆分为具有1/0值标志的列向量?

我有这样的角色矢量:

a <- c("a,b,c", "a,b", "a,b,c,d")

我想要做的是创建一个如下所示的数据框:

   a    b    c    d
1] 1    1    1    0
2] 1    1    0    0
3] 1    1    1    1
Run Code Online (Sandbox Code Playgroud)

我有一种感觉,我需要使用的某种组合read.tablereshape,但我真的很挣扎.任何和帮助赞赏.

r

13
推荐指数
3
解决办法
828
查看次数

如何在data.table中"取消列出"列

在我的表中,一些单元格是向量而不是单个值,即列是列表而不是向量:

dt1 <- data.table(
  colA=   c('A1','A2','A3'), 
  colB=list('B1',c('B2a','B2b'),'B3'),
  colC=   c('C1','C2','C3'), 
  colD=   c('D1','D2','D3')
)

dt1
#   colA    colB colC colD
#1:   A1      B1   C1   D1
#2:   A2 B2a,B2b   C2   D2
#3:   A3      B3   C3   D3 
Run Code Online (Sandbox Code Playgroud)

我需要将其重新整理成一个长格式的列表colB.到目前为止我这样做:

dt1[,.(colB=unlist(colB)),by=.(colA,colC,colD)]
#   colA colC colD colB
#1:   A1   C1   D1   B1
#2:   A2   C2   D2  B2a
#3:   A2   C2   D2  B2b
#4:   A3   C3   D3   B3
Run Code Online (Sandbox Code Playgroud)

它完成了工作,但我不喜欢我必须明确指出所有其他列名称by=.有没有更好的方法来做到这一点?
(我确定它已经在其他地方得到了解答,但到目前为止我找不到它)

PS理想情况下我想管理没有任何外部包

r data.table

13
推荐指数
2
解决办法
1898
查看次数

按列过滤数据集中的行

我有下表:

FN LN LN1 LN2 LN3 LN4 LN5
a   b   b   x   x   x   x
a   c   b   d   e   NA  NA
a   d   c   a   b   x   x
a   e   b   c   d   x   e
Run Code Online (Sandbox Code Playgroud)

我正在过滤LN1到LN5中存在LN的记录.

我用过的代码:

testFilter = filter(test, LN %in% c(LN1, LN2, LN3, LN4, LN5)) 
Run Code Online (Sandbox Code Playgroud)

结果不是我所期望的:

ï..FN LN LN1 LN2 LN3  LN4  LN5
1     a  b   b   x   x    x    x
2     a  c   b   d   e <NA> <NA>
3     a  d   c   a   b    x    x …
Run Code Online (Sandbox Code Playgroud)

r subset dataframe

13
推荐指数
5
解决办法
1082
查看次数

连接两列的因子水平

我有2列数据具有相同类型的数据(字符串).

我想加入列的级别.即.我们有:

col1   col2
Bob    John
Tom    Bob
Frank  Jane
Jim    Bob
Tom    Bob
...    ... (and so on)
Run Code Online (Sandbox Code Playgroud)

现在col1有4个等级(Bob,Tom Frank,Jim),col2有3个等级(John,Jane,Bob)

但是我希望两个列都具有所有因子级别(Bob,Tom,Frank,Jim,Jane,John),以便稍后用唯一的id替换每个'names',这样最终的输出将是:

col1   col2
1      5
2      1
3      6
4      1
2      1
Run Code Online (Sandbox Code Playgroud)

那是两个列中的Bob - > 1,Tom - > 2等.

有任何想法吗 :) ?

编辑:谢谢大家的精彩答案!据我所知,你们都很棒:)

r dataframe

12
推荐指数
2
解决办法
5937
查看次数

R从字符串中提取第一个数字

我在变量中有一个字符串,我们称之为v1.该字符串表示图片编号,采用"Pic 27 + 28"的形式.我想提取第一个数字并将其存储在一个名为item的新变量中.

我尝试过的一些代码是:

item <- unique(na.omit(as.numeric(unlist(strsplit(unlist(v1),"[^0-9]+")))))
Run Code Online (Sandbox Code Playgroud)

这很好,直到我找到了一个列表:

[1,] "Pic 26 + 25"
[2,] "Pic 27 + 28"
[3,] "Pic 28 + 27"
[4,] "Pic 29 + 30"
[5,] "Pic 30 + 29"
[6,] "Pic 31 + 32"
Run Code Online (Sandbox Code Playgroud)

在这一点上,我获得了比我想要的更多的数字,因为它也抓住了其他唯一的数字(25).

我实际上尝试过使用gsub,但没有任何工作.帮助将非常感激!

regex r gsub strsplit

12
推荐指数
3
解决办法
1万
查看次数

如何通过do函数strsplit某些列中不同数量的字符串

当列的元素具有不同的字符串数时,我遇到了拆分列值的问题.我可以在plyr中做到这一点,例如:

library(plyr)
column <- c("jake", "jane jane","john john john")
df <- data.frame(1:3, name = column)
df$name <- as.character(df$name)
df2 <- ldply(strsplit(df$name, " "), rbind)
View(df2)
Run Code Online (Sandbox Code Playgroud)

因此,我们的数据框的列数与给定元素中的最大蜇数有关.

当我尝试在dplyr中执行此操作时,我使用了do函数:

library(dplyr)
df2 <- df %>%
  do(data.frame(strsplit(.$name, " ")))
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误:

Error in data.frame("jake", c("jane", "jane"), c("john", "john", "john" : 
arguments imply differing number of rows: 1, 2, 3
Run Code Online (Sandbox Code Playgroud)

在我看来应该使用rbind功能,但我不知道在哪里.

r plyr dplyr

12
推荐指数
1
解决办法
5659
查看次数

如何更改因子级别的名称?

训练集

trainSample <- cbind(data[1:980,1], data[1:980,2]) cl <-
factor(c(data[1:980,3]))
Run Code Online (Sandbox Code Playgroud)

测试集

testSample <- data(data[981:1485,1], data[981:1485,2])
cl.test <- clknn
Run Code Online (Sandbox Code Playgroud)

预测

k <- knn(trainSample, testSample, cl, k = 5)
Run Code Online (Sandbox Code Playgroud)

产量

< k

  [1] 2 2 1 1 1 1 2 1 2 1 1 2 2 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 1 2 2 1 1 2 2 1 1 2 2 2 2 1 2 2 2 2 2 2 1 2 …
Run Code Online (Sandbox Code Playgroud)

r rename levels

12
推荐指数
2
解决办法
5万
查看次数

dcast错误:'遗漏聚合函数:默认为长度'

df看起来像这样:

Id  Task Type    Freq  
3     1    A       2
3     1    B       3
3     2    A       3
3     2    B       0
4     1    A       3
4     1    B       3
4     2    A       1
4     2    B       3
Run Code Online (Sandbox Code Playgroud)

我想通过Id进行重组并得到:

Id   A    B …  Z    
3    5    3      
4    4    6        
Run Code Online (Sandbox Code Playgroud)

我试过了:

df_wide <- dcast(df, Id + Task ~ Type, value.var="Freq")
Run Code Online (Sandbox Code Playgroud)

并得到错误:

聚合函数缺失:默认为长度

我无法弄清楚要放什么fun.aggregate.有什么问题?

r reshape reshape2 data.table

12
推荐指数
1
解决办法
7442
查看次数

将data.table的行转换为向量

我想将data.table行转换为向量.这对我有用:

unlist(dt[row_num])
Run Code Online (Sandbox Code Playgroud)

但是有更原生的解决方案吗?我也不喜欢上面保留名称的时候我真的想要一个纯数字向量,然后导致:

as.numeric(unlist(dt[row_num]))
Run Code Online (Sandbox Code Playgroud)

似乎应该有更好的选择.

r data.table

12
推荐指数
2
解决办法
1万
查看次数

R以因子格式从时间中提取小时数

我有一个时间向量,它是因子的格式.例如,Time [1]是8:01:01,class(Time [1])是factor.

现在我想从这个向量中提取小时和分钟.这种计算效率最高的方法是什么?我的矢量非常大.非常感谢,

r

12
推荐指数
4
解决办法
3万
查看次数

标签 统计

r ×10

data.table ×3

dataframe ×2

dplyr ×1

gsub ×1

levels ×1

plyr ×1

regex ×1

rename ×1

reshape ×1

reshape2 ×1

strsplit ×1

subset ×1