- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试根据非常具体的标准选择和转换 R 数据框中的一些行,但我不太确定从哪里开始。所以我有一个看起来像这样的数据框:
ID t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 gr1 gr2 gr3 gr4
1 0 0 1 0 0 0 2 2 0 0 1 0 0 0
2 1 0 0 0 2 0 2 2 2 2 0 1 0 0
3 1 1 1 2 0 2 2 1 2 0 0 1 0 0
4 0 0 0 1 2 2 1 1 1 0 0 0 0 1
5 2 0 0 1 0 0 1 0 0 0 0 0 1 0
t 列用于时间,或每只动物的再次遭遇场合(唯一 ID#)。
gr 列用于动物所属的组。
时间列下的数据定义了在时间 t 遇到动物的状态。
在我的数据框中,我有从状态 2 到状态 1 的动物,这是正常的,我想保持这种状态。但是,我也有从状态 1 到状态 2 的动物,这是我用来分析数据的程序中没有的。所以我想做的是为从 1 到 2 的每个个体创建一个“虚拟”个体,并将相遇历史分隔为 2。
我需要做的第一件事是将原始行中的所有数据保持一致,直到到达有一个 2 的时间,将这个 2 替换为 1,并将其余的历史替换为 0。我还需要将组标识符的值更改为 -1 而不是 1。所有这些仅适用于从 1 到 2 的历史记录,而不是其他历史记录,即如果我有从 2 到 1 的历史记录,我希望它们保持原样(例如 ID#5)。
接下来,我需要创建一个带有 x' 标识符的新行,它将包含 0 作为历史记录的开始,直到从 1 切换到 2(因此在第一个 2 的时间步),但将包含其余的捕获历史,并将 1 放在与原始行相同的组中。如果从 2 到 1 的转换发生不止一次,则以相同的方式重复转换。所以基本上我想接受这个:
ID t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 gr1 gr2 gr3 gr4
1 0 0 1 0 0 0 2 2 0 0 1 0 0 0
并把它变成这样:
ID t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 gr1 gr2 gr3 gr4
1 0 0 1 0 0 0 1 0 0 0 -1 0 0 0
1' 0 0 0 0 0 0 2 2 0 0 1 0 0 0
所以如果应用于整个数据框,我想采用:
ID t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 gr1 gr2 gr3 gr4
1 0 0 1 0 0 0 2 2 0 0 1 0 0 0
2 1 0 0 0 2 0 2 2 2 2 0 1 0 0
3 1 1 1 2 0 2 2 1 2 0 0 1 0 0
4 0 0 0 1 2 2 1 1 1 0 0 0 0 1
5 2 0 0 1 0 0 1 0 0 0 0 0 1 0
然后把它变成这样:
ID t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 gr1 gr2 gr3 gr4
1 0 0 1 0 0 0 1 0 0 0 -1 0 0 0
1' 0 0 0 0 0 0 2 2 0 0 1 0 0 0
2 1 0 0 0 1 0 0 0 0 0 0 -1 0 0
2' 0 0 0 0 2 0 2 2 2 2 0 1 0 0
3 1 1 1 1 0 0 0 0 0 0 0 -1 0 0
3' 0 0 0 2 0 2 2 1 1 0 0 -1 0 0
3'' 0 0 0 0 0 0 0 0 2 0 0 1 0 0
4 0 0 0 1 1 0 0 0 0 0 0 0 0 -1
4' 0 0 0 0 2 2 1 1 1 0 0 0 0 1
5 2 0 0 1 0 0 1 0 0 0 0 0 1 0
我知道这很复杂,我知道我需要如何分离不同的步骤,但我很难弄清楚如何开始第一步,即在数据框中搜索正确的行。挑战来自这样一个事实,即 1 和后面的 2 可以在相邻的列中,或者它们之间有一堆 1 和/或 0。
无论如何,非常感谢您的帮助,如果我可以做些什么来使文本/标题更清晰,请告诉我!
最佳答案
我认为这行得通,可能有更优雅的方法,但行得通:
### YOUR DATA
data <- data.frame(ID=c(1:5),t1=c(0,1,1,0,2),t2=c(0,0,1,0,0),t3=c(1,0,1,0,0),t4=c(0,0,2,1,1),t5=c(0,2,0,2,0),t6=c(0,0,2,2,0),t7=c(2,2,2,1,1),t8=c(2,2,1,1,0),t9=c(0,2,2,1,0),t10=c(0,2,0,0,0),gr1=c(1,0,0,0,0),gr2=c(0,1,1,0,0),gr3=c(0,0,0,0,1),gr4=c(0,0,0,1,0))
for(i in 1:length(data$ID)){
bg = which(data[i,2:11]==2)+1 ### Where is there 2?
bg = ifelse(length(bg) == 0,0,min(bg)) ###prevent NA and take 1st occurence of 2
bgg = which(data[i,bg:11]==2) ### Where is there 2 after the first 2?
bgg = c((ifelse(bgg == 0,0,bgg+(bg-1)))) ### Prevent NA
mn = as.numeric(which.max(data[i,2:bg]==1))+1 ### Last one before 2
if((mn-bg) < 0){
### ------- SECOND TASK ------###
### Keep the task in this order if you wanna keep the original history after the 2
n<-nrow(data)+i ### Define a new row
data[n,] = data[i,] ### Paste the data
data[n,2:mn] = 0 ### Put zero before the 2
data[n,1] = paste(i,"'") ### Name the ID'
###------- FIRST TASK -----####
data[i,bgg] = 0 ### DAta after the 2 become 0
data[i,bg] = 1 ### the 2 become 1
data$change[i] = "yes" ### Keep history of change
while(sum(data[i,12:15])>0){
data[i,12] = data[i,12] * -1 ### Negative if change
data[i,13] = data[i,13] * -1
data[i,14] = data[i,14] * -1
data[i,15] = data[i,15] * -1
}}
else if((mn-bg)>=0){
data$change[i] = "no" ### Keep history of no change
}
}
dummies<-subset(data, data$change=="yes")
希望这是你想要的:)
胜利的旅鼠
关于r - 如何根据列值选择行并在 R 中的大型数据框中以特定方式转换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43328886/
初学者 android 问题。好的,我已经成功写入文件。例如。 //获取文件名 String filename = getResources().getString(R.string.filename
我已经将相同的图像保存到/data/data/mypackage/img/中,现在我想显示这个全屏,我曾尝试使用 ACTION_VIEW 来显示 android 标准程序,但它不是从/data/dat
我正在使用Xcode 9,Swift 4。 我正在尝试使用以下代码从URL在ImageView中显示图像: func getImageFromUrl(sourceUrl: String) -> UII
我的 Ubuntu 安装 genymotion 有问题。主要是我无法调试我的数据库,因为通过 eclipse 中的 DBMS 和 shell 中的 adb 我无法查看/data/文件夹的内容。没有显示
我正在尝试用 PHP 发布一些 JSON 数据。但是出了点问题。 这是我的 html -- {% for x in sets %}
我观察到两种方法的结果不同。为什么是这样?我知道 lm 上发生了什么,但无法弄清楚 tslm 上发生了什么。 > library(forecast) > set.seed(2) > tts lm(t
我不确定为什么会这样!我有一个由 spring data elasticsearch 和 spring data jpa 使用的类,但是当我尝试运行我的应用程序时出现错误。 Error creatin
在 this vega 图表,如果我下载并转换 flare-dependencies.json使用以下 jq 到 csv命令, jq -r '(map(keys) | add | unique) as
我正在提交一个项目,我必须在其中创建一个带有表的 mysql 数据库。一切都在我这边进行,所以我只想检查如何将我所有的压缩文件发送给使用不同计算机的人。基本上,我如何为另一台计算机创建我的数据库文件,
我有一个应用程序可以将文本文件写入内部存储。我想仔细看看我的电脑。 我运行了 Toast.makeText 来显示路径,它说:/数据/数据/我的包 但是当我转到 Android Studio 的 An
我喜欢使用 Genymotion 模拟器以如此出色的速度加载 Android。它有非常好的速度,但仍然有一些不稳定的性能。 如何从 Eclipse 中的文件资源管理器访问 Genymotion 模拟器
我需要更改 Silverlight 中文本框的格式。数据通过 MVVM 绑定(bind)。 例如,有一个 int 属性,我将 1 添加到 setter 中的值并调用 OnPropertyChanged
我想向 Youtube Data API 提出请求,但我不需要访问任何用户信息。我只想浏览公共(public)视频并根据搜索词显示视频。 我可以在未经授权的情况下这样做吗? 最佳答案 YouTube
我已经设置了一个 Twilio 应用程序,我想向人们发送更新,但我不想回复单个文本。我只是想让他们在有问题时打电话。我一切正常,但我想在发送文本时显示传入文本,以确保我不会错过任何问题。我正在使用 p
我有一个带有表单的网站(目前它是纯 HTML,但我们正在切换到 JQuery)。流程是这样的: 接受用户的输入 --- 5 个整数 通过 REST 调用网络服务 在服务器端运行一些计算...并生成一个
假设我们有一个名为 configuration.js 的文件,当我们查看内部时,我们会看到: 'use strict'; var profile = { "project": "%Projec
这部分是对 Previous Question 的扩展我的: 我现在可以从我的 CI Controller 成功返回 JSON 数据,它返回: {"results":[{"id":"1","Sourc
有什么有效的方法可以删除 ios 中 CBL 的所有文档存储?我对此有疑问,或者,如果有人知道如何从本质上使该应用程序像刚刚安装一样,那也会非常有帮助。我们正在努力确保我们的注销实际上将应用程序设置为
我有一个 Rails 应用程序,它与其他 Rails 应用程序通信以进行数据插入。我使用 jQuery $.post 方法进行数据插入。对于插入,我的其他 Rails 应用程序显示 200 OK。但在
我正在为服务于发布请求的 API 调用运行单元测试。我正在传递请求正文,并且必须将响应作为帐户数据返回。但我只收到断言错误 注意:数据是从 Azure 中获取的 spec.js const accou
我是一名优秀的程序员,十分优秀!