相关疑难解决方法(0)

在data.table对象的末尾按引用添加行

在这个问题中,data.table包创建者解释了为什么行不能通过引用在中间插入(或删除)data.table.他还指出,这种操作可以在表格末尾进行.你能展示一个代码来完成这个动作吗?它将是"参考"版本

a<- data.table(id=letters[1:2], var=1:2)
> a
   id var
1:  a   1
2:  b   2
> rbind(a, data.table(id="c", var=3))
   id var
1:  a   1
2:  b   2
3:  c   3
Run Code Online (Sandbox Code Playgroud)

谢谢.

编辑:

既然不可能采用适当的解决方案,那么从速度和内存使用情况来看,下列哪一项更好(如果内部不同,不确定)?

rbind(a, data.table(id="c", var=3))

rbindlist(list(a,  data.table(id="c", var=3)))
Run Code Online (Sandbox Code Playgroud)

最终还有其他(更好)的方法吗?

r data.table

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

在每个组之前插入行

我有以下列表,我想在每组ID之前添加一个新行,保留ID并将A和B设置为1.00.

       ID      DATEE       A      B 
   102984 2016-11-23      2.0    2.0
   140349 2016-11-23      1.5    1.5
   167109 2017-04-16      2.0    2.0
   167109 2017-06-21      1.5    1.5
Run Code Online (Sandbox Code Playgroud)

最终结果:

  ID      DATEE           A      B     
  102984    NA           1.0    1.0
  102984 2016-11-23      2.0    2.0       
  140349    NA           1.0    1.0      
  140349 2016-11-23      1.5    1.5
  167109    NA           1.0    1.0             
  167109 2017-04-16      2.0    2.0       
  167109 2017-06-21      1.5    1.5       
Run Code Online (Sandbox Code Playgroud)

到目前为止,我使用了以下代码,在每个组的底部添加一个空行do.call(rbind,by(df,df $ ID,rbind,""))但是我无法在其中引入特定值当我用值向量代替""时各自的列.

r

4
推荐指数
1
解决办法
135
查看次数

R编程:修改时避免复制整个数据帧?

在修改数据框中的一个条目时,R似乎复制整个数据帧.我想知道是否有办法让R只复制相应的数据列(例如下面的特定INTSXP而不是VECSXP)来维护复制变更策略?还有办法对数据帧进行现场修改吗?

> x<-data.frame(x=1:1000000,y=1:1000000)
> .Internal(inspect(x))
@62cd2b0 19 VECSXP g0c2 [OBJ,MARK,NAM(2),ATT] (len=2, tl=0)
  @f80d0e0 13 INTSXP g0c7 [MARK] (len=1000000, tl=0) 1,2,3,4,5,...
  @8ed6970 13 INTSXP g0c7 [] (len=1000000, tl=0) 1,2,3,4,5,...
ATTRIB:
  @68f6b40 02 LISTSXP g0c0 []
    TAG: @4e58868 01 SYMSXP g1c0 [MARK,LCK,gp=0x4000] "names" (has value)
    @613efd0 16 STRSXP g0c2 [] (len=2, tl=0)
      @4e93038 09 CHARSXP g1c1 [MARK,gp=0x61] [ASCII] [cached] "x"
      @4fe8bd8 09 CHARSXP g1c1 [MARK,gp=0x61] [ASCII] [cached] "y"
    TAG: @4e62650 01 SYMSXP g1c0 [MARK,LCK,gp=0x4000] "row.names" (has value)
    @113bb328 13 INTSXP g0c1 [] …
Run Code Online (Sandbox Code Playgroud)

r dataframe

3
推荐指数
2
解决办法
332
查看次数

使用rbind添加一行会更改R中data.table中列的性质

我正在接受data.table:

DT <- data.table(num=c(1,4,6,7,8,12,13, 15), let=rep(c("A","B"), each=4))
Run Code Online (Sandbox Code Playgroud)

那么我有以下结果:

> sapply(DT, class)
    num         let 
"numeric" "character" 
Run Code Online (Sandbox Code Playgroud)

哪个好.

然后,添加一行:

DT<-rbind(DT, as.list(c(8, "B")))
Run Code Online (Sandbox Code Playgroud)

然后:

> sapply(DT, class)
    num         let 
"character" "character" 
Run Code Online (Sandbox Code Playgroud)

我发现这种恶意,R将第一列类型更改为字符并且没​​有预料到......我之后可以将列更改为数字但是如果我必须在每次插入后检查,那就太痛苦了.

有没有办法添加没有这个缺点的线?

r data.table

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

标签 统计

r ×4

data.table ×2

dataframe ×1