R:更改主题内的重复值

时间:2017-11-24 19:03:24

标签: r duplicates conditional

 Subj  Trial  Time
1 A      1     250
2 A      2     250
3 A      3     280
4 B      1     250
5 B      2     270
6 B      3     290

以上是我正在使用的数据示例。我有不同的科目( Subj )执行相同的试验(试验)。不幸的是,当试用事件快速连续发生时,我的设备将打印相同的时间值( 请参阅第1行和第2行的时间列 )。

我不能让同一个主题有重复的时间值,但是,不同的主题可以拥有相同的时间值。因此,我需要一种方法来有条件地更改重复项,以便仅更改特定主题中的时间重复。

理想情况下,我想将上面的示例更改为以下内容:

 Subj  Trial  Time
1 A      1     250
2 A      2     250.5
3 A      3     280
4 B      1     250
5 B      2     270
6 B      3     290

关于我如何能够实现这一目标的任何建议?

谢谢!

3 个答案:

答案 0 :(得分:2)

使用pipe()的解决方案。我们可以按 protected override void Initialize() { base.Initialize(); IServiceContainer serviceContainer = this as IServiceContainer; EnvDTE.DTE dte = serviceContainer.GetService(typeof(SDTE)) as EnvDTE.DTE; var events2 = (EnvDTE80.Events2)dte.Events; EnvDTE80.WindowVisibilityEvents toolBoxWindowVisibilityEvents = events2.get_WindowVisibilityEvents(); toolBoxWindowVisibilityEvents.WindowShowing += WindowVisibilityEvents_WindowShowing; } private void WindowVisibilityEvents_WindowShowing(Window window) { if (window.Type == vsWindowType.vsWindowTypeToolWindow && window.Caption == "Start Page") { //Start page is opening... } } from flask import Flask from flask_mysqldb import MySQL app = Flask(__name__) app.config['MYSQL_HOST'] = 'localhost' app.config['MYSQL_USER'] = 'root' app.config['MYSQL_PASSWORD'] = 'password' app.config['MYSQL_DB'] = 'todoapp' app.config['MYSQL_CURSORCLASS'] = 'DictCursor' mysql = MySQL(app) cur = mysql.connection.cursor() if __name__ == '__main__': app.run() 对数据进行分组,计算出现次数,如果出现次数超过1,则通过添加dplyr来更改Subj。 / p>

Time

数据

Time

答案 1 :(得分:2)

与已经提供的解决方案有些类似,但不计算在内。这包括两个解决方案:

base R

do.call(rbind, lapply(split(df, list(df$Subj, df$Time)), function(x) {
    x$Time <- x$Time + seq(0, by=0.5, length.out=nrow(x))
    x
}))

tidyverse

library(dplyr)


df %>%
    group_by(Subj, Time) %>%
    mutate(Time2 = Time + seq(0, by=0.5, length.out=n()))

他们都应该产生类似于以下内容的东西:

#  Subj Trial Time 
#  A    1     250.0
#  A    2     250.5
#  B    1     250.0
#  B    2     270.0
#  A    3     280.0
#  B    3     290.0

关键是将数据框拆分为由SubjTime列组合定义的块。从这里开始,剩下的工作很简单:从Time开始,0.5列中的值增加0,这个序列的长度与块的长度相同。

我希望这证明有用。

答案 2 :(得分:1)

以下是base R选项duplicated。我们根据列'Subj','Time'创建重复元素的逻辑索引,然后通过向其添加0.5来为这些元素指定'Time'值。

i1 <- duplicated(df1[c('Subj', 'Time')])
df1$Time[i1] <- df1$Time[i1] + 0.5
df1
#  Subj Trial  Time
#1    A     1 250.0
#2    A     2 250.5
#3    A     3 280.0
#4    B     1 250.0
#5    B     2 270.0
#6    B     3 290.0