如何在R中创建数据框的副本

use*_*665 21 r dataframe

我想复制已从*.csv文件读入的数据框的全部内容.如果我这样做,我不相信这是重复copyOfFirstFrame <- firstFrame.那么我需要做什么?

firstFrame <- read_csv("fileName.csv")
copyOfFirstFrame <- ?????
Run Code Online (Sandbox Code Playgroud)

如果我执行以下操作,则内​​存地址保持不变.

copyOfFirstFrame <- firstFrame
tracemem(firstFrame) == tracemem(copyOfFirstFrame)
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

副本必须产生两个唯一的内存地址.Check In R,我如何检查两个变量名是否引用相同的底层对象?详情.

小智 28

设DATA是预先存在的数据帧对象.我正在创建一个新对象COPY,它是DATA的精确副本,但它占用不同的内存位置,因此不指向原始数据帧.

我使用函数data.frame(),如下所示:

> COPY<-data.frame(DATA)
Run Code Online (Sandbox Code Playgroud)

我使用tracemem()检查内存地址是否相同:

> tracemem(COPY)==tracemem(DATA)
> [1] FALSE
Run Code Online (Sandbox Code Playgroud)

我觉得嘛够了.


hd1*_*hd1 11

将cbind与一个data.frame一起使用将确保您拥有一个副本:

> df <- cbind(NA, NA)
> df2 <- cbind(df)
> df2
     [,1] [,2]
[1,]   NA   NA
> df2[,1] <- 1
> df
     [,1] [,2]
[1,]   NA   NA
> df2
     [,1] [,2]
[1,]    1   NA
> 
Run Code Online (Sandbox Code Playgroud)


jay*_*.sf 5

或者我们可以使用data.table::copy().

df.1 <- data.frame(1)

library(data.table)
df.2 <- copy(df.1)

> tracemem(df.1) == tracemem(df.2)
[1] FALSE
Run Code Online (Sandbox Code Playgroud)